2009-01-30 65 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