2010-12-20 42 views
1

我有一個標籤表可以鏈接到其他標籤,我想「遞歸」按順序選擇標籤。因此,當進行搜索時,我們得到立即(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

AFAIK MySQL沒有用於查詢數據遞歸

Oracle有任何機構Connected By構造和Sql Server有CTE(Common Table Expressions)

然而MySQL, 讀HereHere

+1

剛去完成列表:Firebird,PostgreSQL和DB2也支持遞歸查詢。 – 2010-12-21 08:21:15