圖像這兩個表:檢索博客文章與相關標籤的列表以較少的查詢
Table: Item
Columns: ItemID, Title
Table: Tag
Columns: TagID, ItemID, Title
這是最好的方式(不更改表結構(是的,我不介意,如果他們不歸))檢索一個項目列表,其所有標籤都使用較少的可能查詢(即不執行11個查詢來檢索10個項目)?
圖像這兩個表:檢索博客文章與相關標籤的列表以較少的查詢
Table: Item
Columns: ItemID, Title
Table: Tag
Columns: TagID, ItemID, Title
這是最好的方式(不更改表結構(是的,我不介意,如果他們不歸))檢索一個項目列表,其所有標籤都使用較少的可能查詢(即不執行11個查詢來檢索10個項目)?
下面是一個簡單的外連接。那是你的追求?
SELECT
It.ItemID,
It.Title [ItemTitle],
Tg.TagID,
Tg.Title [TagTitle]
FROM Item It
LEFT OUTER JOIN Tag Tg
ON It.ItemID = Tg.ItemID
我不完全確定你在做什麼,但這有幫助嗎?
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']);
}
該查詢不檢索沒有標籤的項目,但PHP邏輯有助於理解如何處理查詢結果。謝謝 – 2009-01-30 11:45:24
該查詢比Ben提出的查詢要好,因爲它也檢索沒有標籤的項目。謝謝 – 2009-01-30 11:44:01