Получение списка сообщений в блоге со связанными тегами с меньшим количеством запросов - PullRequest
0 голосов
/ 30 января 2009

изображение этих двух таблиц:

Table: Item
Columns: ItemID, Title

Table: Tag
Columns: TagID, ItemID, Title

Какой самый лучший способ (без изменения структуры таблицы (да, я не против, если они не нормализованы)), чтобы получить список элементов со всеми прикрепленными к ним тегами, используя менее вероятный запрос (т.е. не делать 11 запросов к получить 10 предметов)?

Ответы [ 2 ]

1 голос
/ 30 января 2009

Я не совсем уверен, что вы ищете, но помогает ли это?

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']);
}
1 голос
/ 30 января 2009

Вот простое внешнее соединение. Это то, что вы после?

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