2012-06-11 30 views
0

我試圖顯示最近的20篇文章和它們各自的標籤(每篇文章都有大約3-4個標籤)。我有一個文章表和一個標籤表,每篇文章都有3-4行標籤和文章ID。php + mysql:提取每篇文章的所有標籤

我知道該怎麼做的是:

$result = $mysqli->query("SELECT * FROM items LIMIT 0,24 "); 
while ($row = $result->fetch_object()) { 
     $result2 = $mysqli->query("SELECT tag FROM tags WHERE item_id = ".$row->id); 
       while ($row2 = $result2->fetch_object()) { 
         echo $row2 . '<br>'; 
       } 
} 

當我嘗試做一個連接我得到每一篇文章出現在3-4行。

這似乎並不乾淨。有沒有更好的方法來提取每篇文章的標籤?我願意聽到關於存儲數據,以及不同的方式,我剛開始的項目...

+0

加入並使用「group by」 – jcho360

+0

但是group by只給我一個標籤 –

回答

0

你可以嘗試SELECT DISTINCT ITEMID FROM項目LIMIT 0,24

這隻會返回一個結果每個itemID

0

好的做法是加入這兩張表,但是因爲理論上,一篇文章可能有很多標籤,這會產生一些開銷。

所以在這種情況下,最好的辦法是; 存儲你的第一個查詢的結果,在一個關聯數組,其中鍵是項目ID:

$items = array(); 
    $result = $mysqli->query("SELECT * FROM items LIMIT 0,24 "); 
    while ($row = $result->fetch_object()) { 
     $items[$row->item_id] = $row; 
     $items[$row->item_id]->tags = array(); 
    } 

本次迭代後,執行第二查詢,但對所有項目的ID選擇:

$result2 = $mysqli->query("SELECT item_id, tag FROM tags WHERE item_id IN (".implode(',', array_keys($items)).")"); 

    while ($row2 = $result2->fetch_object()) { 
     $items[$row2->item_id]->tags[] = $row2->tag; 
    } 

這樣,您只需填寫2維查詢中的完整多維數組。

+0

事情是我在顯示文章,所以我想在第一次迭代中找到所有標籤 –

相關問題