Récupération d'une liste de billets de blog avec des balises associées avec moins de requête

StackOverflow https://stackoverflow.com/questions/495098

  •  20-08-2019
  •  | 
  •  

Question

image ces deux tables:

Table: Item
Columns: ItemID, Title

Table: Tag
Columns: TagID, ItemID, Title

Quel est le meilleur moyen (sans changer la structure de la table (oui, cela ne me dérange pas s'ils ne sont pas normalisés)) de récupérer une liste d'éléments avec toutes leurs balises attachées en utilisant une requête moins possible (c'est-à-dire ne pas effectuer 11 requêtes récupérer 10 éléments)?

Était-ce utile?

La solution

Voici une simple jointure externe. Est-ce ce que vous recherchez?

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

Autres conseils

Je ne suis pas tout à fait sûr de ce que vous recherchez, mais est-ce que cela vous aide?

select Item.ItemID, Item.Title, Tag.TagID, Tag.Title from Item, Tag 
  where Item.ItemID=Tag.ItemID

Lorsque vous dites que vous ne voulez pas effectuer 11 requêtes, voulez-vous dire que vous ne voulez pas effectuer 11 requêtes SQL ou que vous ne voulez pas recevoir vos résultats sur 10 lignes? Dans ce dernier cas, cela signifie simplement que vous devez parcourir les résultats dans la langue utilisée pour appeler SQL. Exemple, en 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']);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top