所以我跟着他们在这里做了什么: MySQL query to search for items with certain tags
但是有一个额外的要求,假设我们有以下数据:
cat myscript.py | ssh -X username@machinename.departmentname.universityname.edu python
我希望搜索标记为id 2(水果)的项目,并期望返回项目香蕉和橙色。首先,这是存储信息的最佳方式,如果是这样,那么我可以运行哪些最有效的查询来获取香蕉及其子橙色。
由于
答案 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'