我有一个可以链接到其他标签的标签表,我希望“递归地”按照排列顺序选择标签。因此,当进行搜索时,我们得到即时(1级)结果然后继续说5级,这样我们总是有一个标签列表,无论级别1上是否有足够的完全匹配
我可以通过多次查询来管理这个问题,直到我得到足够的结果,但通过一次性查询肯定会有更好的,优化的方式吗?
任何提示将不胜感激。 谢谢!
结果:
tagId, tagWord, child, child tagId
'513', 'Slap', 'Hog Slapper', '1518'
'513', 'Slap', 'Corporal Punishment', '147'
'513', 'Slap', 'Impact Play', '1394'
查询:
SELECT t.tagId, t.tagWord as tag, tt.tagWord as child, tt.tagId as childId
FROM platform.tagWords t
INNER JOIN platform.tagsLinks l ON l.parentId = t.tagId
INNER JOIN platform.tagWords tt ON tt.tagId = l.tagId
WHERE t.tagWord = 'slap'
表格布局:
mysql> explain tagWords;
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| tagId | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| tagWord | varchar(45) | YES | UNI | NULL | |
+---------+---------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> explain tagsLinks;
+----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| tagId | bigint(20) unsigned | NO | | NULL | |
| parentId | bigint(20) | YES | | NULL | |
+----------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
答案 0 :(得分:0)
AFAIK Mysql没有任何递归查询数据的机制
Oracle有Connected By
构造,Sql Server有CTE(Common Table Expressions)
。
答案 1 :(得分:0)
每当我发现自己处于查询分层数据的情况时,我会考虑以下选项。