2013-01-08 41 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注入使用前清理物品標識和所有