MySQL查询以搜索具有父项标记的项目

时间:2017-06-28 20:35:09

标签: mysql

所以我跟着他们在这里做了什么: MySQL query to search for items with certain tags

但是有一个额外的要求,假设我们有以下数据:

cat myscript.py | ssh -X username@machinename.departmentname.universityname.edu python

我希望搜索标记为id 2(水果)的项目,并期望返回项目香蕉和橙色。首先,这是存储信息的最佳方式,如果是这样,那么我可以运行哪些最有效的查询来获取香蕉及其子橙色。

由于

1 个答案:

答案 0 :(得分:0)

存储数据的更好方法可能是从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'