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

次のようにエコーアウトします。例:

コメント数:7コメント数:7

助けてください!ありがとう!

4

4 に答える 4

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 

... または結果を制限する このクエリは、結果を切り詰めて、1 つのアイテムのみのカウントを返します。アイテムは多かれ少なかれランダムに選択されますが、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

したがって、あなたの質問から、私は問題が何であるかしかわかりません。どの解決策があなたに最も適しているかはわかりません. ただし、ここで選択できるオプションがいくつかあります。:)

于 2013-01-08T10:01:24.323 に答える
0

co.itemsとi.itemsの異なる値を確認しましたか。アイテムでgroupbyを実行しているため、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インジェクションなどで使用する前に、アイテム識別子をクリーンアップするための予防措置を講じてください。

于 2013-01-08T10:09:02.360 に答える
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);

?>
于 2013-01-08T10:03:48.170 に答える
0

常に LIMIT 1 を投げることができます。これは構文を構築する方法ではないかもしれませんが、データが何であるかを知らなくても、期待する結果を得る簡単な方法は確かにあります。

Replace
$sql = "SELECT COUNT(*) AS comment FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items";

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

于 2013-01-08T10:05:46.377 に答える