Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用较少的查询检索具有相关标记的博客文章列表_Sql_Query Optimization - Fatal编程技术网

Sql 使用较少的查询检索具有相关标记的博客文章列表

Sql 使用较少的查询检索具有相关标记的博客文章列表,sql,query-optimization,Sql,Query Optimization,想象一下这两个表: Table: Item Columns: ItemID, Title Table: Tag Columns: TagID, ItemID, Title 在不改变表结构的情况下(是的,我不介意它们是否被规范化),使用不太可能的查询(即不执行11次查询来检索10个项目)检索带有所有标记的项目列表的最佳方法是什么。这就是你想要的吗 SELECT It.ItemID, It.Title [ItemTitle], Tg.TagID, Tg.Title [TagTit

想象一下这两个表:

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']);
}

此查询比Ben提出的查询更好,因为它还检索没有标记的项。感谢查询不会检索没有标记的项,但是PHP逻辑有助于理解如何处理查询结果。谢谢