使用较少查询检索具有相关标签的博客帖子列表

时间:2009-01-30 10:41:01

标签: sql query-optimization

想象这两个表:

Table: Item
Columns: ItemID, Title

Table: Tag
Columns: TagID, ItemID, Title

哪种方法最好(不改变表格结构(是的,我不介意它们是否未规范化))使用较少的可能查询来检索附加了所有标签的项目列表(即不执行11次查询检索10项)?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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']);
}