我的数据库中有 5 个表。
[Items] - id、name 等...
[Categories] - id、name
[Tags] - id、name
2 连接表
[Items_Categories] - item_id, category_id
[Items_Tags] - item_id, tag_id
在给定 item_id = $id 的情况下,我只需要知道性能最佳的查询(必要时使用 JOINS)即可从数据库中提取 1 个或多个项目及其所有信息,包括类别和标签。
到目前为止,我有以下工作,但在 25 - 50 个查询中,它很慢(有人有更好的东西吗?):
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