2013-01-08 42 views
0
<?php 
     include "connect.php"; 
     // Make a MySQL Connection 
     $sql = "SELECT COUNT(*) AS comment FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
     $result = $mysqli->query($sql); 
     while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
     { 
     ?> 
     No of Comments:&nbsp;<?php echo $row['comment'];?> 
     <?php 
     } 
     ?> 

它回声出来是这样的: 例子:如何检索1行而不是2?

的评论编号:7号的评论:7

请帮帮忙!谢谢!

+0

*无关*:是否有一个特定的原因,你使用非破坏空间,而不是一个普通的空间? – h2ooooooo

+0

将您的查询限制为单个i.items值 –

+0

什么是co.items = i.items?它是文本还是ID? – Sahal

回答

4

这是因为您使用GROUP BY。这意味着您可以获得表格中每个不同i.items的计数。

您可以通过添加项目到查询结果(我改变WHEREON)检查:

SELECT 
    i.items, 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
GROUP BY 
    i.items 

解决方法是指定你想要的物品....

SELECT 
    i.items, 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
WHERE 
    i.items = 'foo' 
/* -- Grouping not needed anymore, since you only have 1 item (= 1 group) 
GROUP BY 
    i.items*/ 

...或不分组,所以你得到了所有项目总数:

-- Will fetch the total number of comments (that are linked to an item) 
SELECT 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 

...或限制结果 此查询只是截断结果,仅返回其中一个项目的计数。 该项目现在或多或少是随机选择的,但您可以添加ORDER BY来影响该项目。

SELECT 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
GROUP BY 
    i.items 
/* -- Optional order, if you need to influence which of the items is preffered. 
ORDER BY 
    i.items*/ 
LIMIT 1 

所以,从你的问题我只能告诉问题是什么,而不是哪个解决方案最适合你。但是这里有几个选项可供选择。 :)

0

试试这个

<?php 

include "connect.php"; 
     // Make a MySQL Connection 
     $sql = "SELECT COUNT(*) AS comment FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
     $result = mysql_query($sql); 

echo "No of Comments:&nbsp;". mysql_result($result, 0); 

?> 
+0

这是什么:( – Sahal

+0

这不是一个答案。100' MINUS'标记 – Sahal

+0

@Shahal你的意思是你用代码试过了吗? – Codesen

0

你可以永远只是抛出一个LIMIT 1;在您的查询,这可能不构成你的语法的方式结束,但不知道你的数据是什么,肯定是有一个简单的方法来获得你所期望的结果:

更换
$ SQL =“ SELECT COUNT(*)AS comment FROM注释co INNER JOIN item i WHERE co.items = i.items GROUP BY i.items“;

与 $ sql =“SELECT COUNT(*)AS comment FROM comment co INNER JOIN item i WHERE co.items = i.items GROUP BY i.items LIMIT 1”;

+1

”这不是关于LIMIT问题,它是'GROUP By'和'INNER JOIN'的问题 – Sahal

+0

我同意Sahel,我说过,在不知道结果的用途的情况下,有很多更好的方法来请求数据,这是加入的一个问题,如果他正在寻找总数的评论,不管项目(我们可以假设他是按项目分组但没有选择项目或在echo语句中引用它,那么他不需要经历这样的麻烦。我假定他会用WHERE语句包装SQL, ich他想要的评论。相反,他应该选择该项目并在每个行的WHILE循环中回显该项目。 – user1955162

0

您是否检查过co.items和i.items的不同值。既然你是在项目执行组,它很可能是有2个不同的值,所以每一行代表不同的项目值

试试这个调试:

$sql = "SELECT COUNT(*) AS comment, i.items AS itemTest FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
    $result = $mysqli->query($sql); 
    while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
    { 
    ?> 
    No of Comments:&nbsp;<?php echo $row['comment'];?> <?php echo $row['itemTest'];?> <br /> 
    <?php 
    } 
    ?> 

还做你需要的加入和组?你打算做什么?如果代码在页面上会为某个特定项目,你应该能够做到

$sql = "SELECT COUNT(*) AS comment FROM comment co WHERE co.items= 'ITEM-IDENTIFIER-HERE' "; 
    $result = $mysqli->query($sql); 
    $row = $result->fetch_array(MYSQLI_ASSOC); 
    ?> 
    No of Comments:&nbsp;<?php echo $row['comment'];?> 

虽然自然未雨绸缪,查询,SQL注入使用前清理物品标识和所有