所以我遵循了他们在这里所做的事情: MySQL query to search for items with certain tags
但是还有一个额外的要求,假设我们有以下数据:
items:
id | item | parent_id
------------------------
1 | banana | 0
2 | orange | 1
3 | tomato | 0
items_tags:
id | item_id | tag_id
---------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 3
4 | 3 | 4
tags:
id | tag
--------------
1 | yellow
2 | fruit
3 | orange
4 | red
我希望搜索标有 id 2(水果)的项目,并希望返回项目香蕉和橙子。首先,这是存储信息的最佳方式,如果是的话,我可以运行以取回香蕉及其子橙子的最有效查询是什么。
谢谢
最佳答案
存储数据的更好方法可能是从 item_tags 表中删除冗余列(规范化):
items:
id | item | parent_id
------------------------
1 | banana | 0
2 | orange | 1
3 | tomato | 0
items_tags:
item_id | tag_id
------------------
1 | 1
1 | 2
2 | 3
3 | 4
tags:
id | tag
--------------
1 | yellow
2 | fruit
3 | orange
4 | red
那么您获取水果的查询(仅包含与“fruit”标签直接相关的项目)可能是:
select items.id, items.item from items
inner join item_tags on (items.id=item_id)
inner join tags on (tags.id=tag_id)
where tag = 'fruit'
还包括由父级连接的项目:
select items.id, items.item from items
inner join items parents on (parents.id=items.parent_id)
inner join item_tags on (item_id=items.id OR item_id=parents.id )
inner join tags on (tags.id=tag_id)
where tag = 'fruit'
关于MySQL 查询搜索带有父项标签的项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812088/