J'ai 5 tables dans ma base de données.
[Articles] - id, nom, etc ...
[Catégories] - id, nom
[tags] - id, nom
Comment extraire les deux catégories AND tags d'une base de données MySQL pour un article?
2 tables Joining
[Items_Categories] - ITEM_ID, category_id
[Items_Tags] - iTEM_ID, tag_id
J'ai besoin tout simplement de connaître la meilleure requête performante (en utilisant REJOINT si nécessaire) pour tirer 1 ou plusieurs articles de la DB avec toutes ses informations, y compris les catégories et les étiquettes, étant donné l'item_id = $ id.
So Far, je donne les résultats suivants qui fonctionne, mais sur 25 - 50 requêtes, il était lent:
SELECT `items`.`name`, `items`.`etc`,
group_concat(DISTINCT categories.name ORDER BY categories.name DESC SEPARATOR ", ") AS category,
group_concat(DISTINCT tags.name ORDER BY tags.name DESC SEPARATOR ", ") AS tag,
`items`.`id` AS id
FROM (`items` AS items, `item_categories` AS categories, `items_to_categories` AS items_cats, `item_tags` AS tags, `items_to_tags` AS items_tags)
JOIN `item_categories` ON `categories`.`id` = `items_cats`.`category_id` AND items_cats.item_id = $id
JOIN `item_tags` ON `tags`.`id` = `items_tags`.`tag_id` AND items_tags.item_id = $id WHERE `items`.`id` = $id
GROUP_CONCAT d'abord, puis rejoindre. Utilisez des sous-requêtes. –
Il n'y a rien de simple à trouver la requête la plus performante. Préfixez votre requête avec Explain et lancez-la, et mettez le résultat dans votre question, tout ce que nous pouvons faire est de deviner pour le moment. –
Les sous-requêtes sont presque toujours un drapeau rouge à mes yeux d'écriture de requête. En outre, je pense qu'il existe des techniques «simples» pour obtenir une base très performante. La partie vraiment difficile est dans l'ultra-ajustement de la performance; mais je n'ai pas remarqué un réel besoin de cela (avec des requêtes bien conçues) jusqu'à ce qu'il y ait des millions de lignes. 9 fois sur 10, comprendre simplement comment le plan de requête sera construit en fonction de votre SQL vous permettra d'écrire des requêtes de plusieurs ordres de grandeur plus efficaces (si votre schéma est bon). –