如何只检索1行而不是2行?

时间:2013-01-08 09:58:40

标签: php mysql count group-by

<?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
        }
        ?>

它像这样回声: 例如:

评论:7评论:7

请帮忙!谢谢!

4 个答案:

答案 0 :(得分:4)

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

您可以通过将这些项添加到查询结果中进行检查(我将WHERE更改为ON):

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

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

答案 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);

?>

答案 2 :(得分:0)

你总是可以扔一个LIMIT 1;在您的查询结束时,这可能不是构建语法的方法,但不知道您的数据是什么,肯定有一种简单的方法来获得您期望的结果:

替换
    $ sql =“SELECT COUNT(*)AS comment from comment 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”;

答案 3 :(得分: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注入和所有