Récupération d'une liste de billets de blog avec des balises associées avec moins de requête
-
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)?
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']);
}