2009-01-30 67 views
0

圖像這兩個表:檢索博客文章與相關標籤的列表以較少的查詢

Table: Item 
Columns: ItemID, Title 

Table: Tag 
Columns: TagID, ItemID, Title 

這是最好的方式(不更改表結構(是的,我不介意,如果他們不歸))檢索一個項目列表,其所有標籤都使用較少的可能查詢(即不執行11個查詢來檢索10個項目)?

回答

1

下面是一個簡單的外連接。那是你的追求?

SELECT 
    It.ItemID, 
    It.Title [ItemTitle], 
    Tg.TagID, 
    Tg.Title [TagTitle] 
FROM Item It 
LEFT OUTER JOIN Tag Tg 
ON It.ItemID = Tg.ItemID 
+0

該查詢比Ben提出的查詢要好,因爲它也檢索沒有標籤的項目。謝謝 – 2009-01-30 11:44:01

1

我不完全確定你在做什麼,但這有幫助嗎?

select Item.ItemID, Item.Title, Tag.TagID, Tag.Title from Item, Tag 
    where Item.ItemID=Tag.ItemID 

當你說你不想做查詢11次,你的意思是你不想做的11個SQL查詢,或者你不想收到10行的結果嗎?如果是後者,那麼我認爲這實際上意味着您需要循環使用您用來調用SQL的任何語言的結果。例如,在PHP中:

$query = "select Item.ItemID as i, Item.Title as t1, Tag.TagID as t, Tag.Title as t2 from Item, Tag where Item.ItemID=Tag.ItemID"; 
$dataset = mysql_query($query) or die(mysql_error()); 

$items = Array(); 

while ($data = mysql_fetch_assoc($dataset)) 
{ 
    $items[$data['i']] = Array($data['t1'], $data['t'], $data['t2']); 
} 
+0

該查詢不檢索沒有標籤的項目,但PHP邏輯有助於理解如何處理查詢結果。謝謝 – 2009-01-30 11:45:24