2016-01-20 72 views
0

我有一個查詢從數據庫返回帖子,查詢按類別對帖子進行分組,並且標題是指向原始帖子的鏈接。返回的帖子顯示在類別頁面上。如何創建原始帖子的鏈接,PHP

問題是,雖然帖子標題按類別顯示和分組,但我發現只找到每個帖子每個帖子的第一個post_id,並且只有每個類別中具有最低ID的第一個帖子或帖子由我的鏈接返回。該鏈接將您帶到原始帖子。 原始訊息被顯示在被稱爲「entries.php」

例頁上:

POST1 ID = 1

POST2 ID = 2

Post3 ID = 3

以上所有帖子都按類別分組,但如果我將鼠標懸停在它們上面,則由於某種原因,它們都會取代Post1 id = 1。有什麼我可以做的,以確保當我將鼠標懸停在他們上面時找到每個ID? 感謝您的時間!

查詢:

$query = "SELECT category, GROUP_CONCAT(DISTINCT title SEPARATOR '<br />') titles, post_id 
     FROM categories, posts 
     WHERE categories.category_id = posts.category_id 
     GROUP BY category"; 

     $result = mysqli_query($dbc, $query) 
      or die('Error querying database.'); 

     while ($row = mysqli_fetch_array($result)){ 
      echo "<h2>".$row['category']."</h2>"; 
      echo '<a href="entries.php?id='.$row['post_id'].'">'.$row['titles'].'</a>'; 
      echo "<hr />"; 
     } 
+0

您的查詢似乎缺少'的'GROUP BY'部分post_id'。 – aaaaaa123456789

回答

0

你應該GROUP BY POST_ID,還可以使用ORDER BY喲排序爲你嘩嘩。

0

你在誤解SQL的GROUPing概念。如果您在category_id上對GROUP行進行GROUP組化,您實際上告訴MySQL:無論存在多少行,我都希望每個category_id都有一行。在標準SQL中,只有在使用「GROUP BY category_id」時才允許「SELECT category_id」(以及聚合函數,如COUNT,MAX,MIN等)。 MySQL允許你多一點,隨意選擇一個命中(它找到的第一個命中)。

你可能想要的是ORDER BY CATEGORY_ID,然後做分組在你的PHP腳本像

$prev_cat_id = null; 
while ($row = mysqli_fetch_array($result)) { 
    if ($prev_cat_id != $row['category_id']) { 
     do stuff for next category 
    } else { 
     do stuff for next post in same category 
    } 
} 
remember to do cleanup for last category