我有一個標籤表可以鏈接到其他標籤,我想「遞歸」按順序選擇標籤。因此,當進行搜索時,我們得到立即(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)
剛去完成列表:Firebird,PostgreSQL和DB2也支持遞歸查詢。 – 2010-12-21 08:21:15