2011-03-25 64 views
1

我有一個表叫tags,這樣排序的數據:麻煩寫MySQL查詢涉及來自三個表

+-------+----------+ 
| tagID | tagName | 
+-------+----------+ 
|  1 | jewelery | 
|  2 | gifts | 
|  3 | asdf  | 
|  4 | fashion | 
|  5 | diamonds | 
+-------+----------+ 

則表名爲coupon_tags,像這樣:

+-------+----------+ 
| tagID | couponID | 
+-------+----------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  2 | 
|  4 |  2 | 
|  5 |  3 | 
+-------+----------+ 

最後,一表叫coupons,這裏是有關部分(ID是一樣的couponID其他地方):

+----+-----------------+ 
| id | zone   | 
+----+-----------------+ 
| 1 | Los Angeles  | 
| 2 | Orange County | 
| 3 | Los Angeles  | 
| 5 | Orange County | 
| 6 | Orange County | 
+----+-----------------+ 

我需要編寫一個查詢:我想通過第一個表獲得tagNames,這個表對應於第二個表中前10個最常用的tagID的有序列表,但它只通過與其他條件匹配的couponID來查找 - 「區域」是某個區域。最後,只有來自特定區域的前10名tagNames會顯示。我從來沒有做過三表查詢,有任何幫助嗎?

我試圖保持這個純粹的SQL,因爲我有一個部分工作的PHP解決方案,但它很混亂,速度很慢。

回答

1
SELECT tags.tagName FROM 
(SELECT tagID, COUNT(*) FROM 
coupon_tags 
JOIN coupons ON coupons.couponID = coupon_tags.couponID AND zone = 'Los Angeles' 
GROUP BY tagID ORDER BY COUNT(*) DESC LIMIT 10) AS most_used 
JOIN tags ON most_used.tagID = tags.tagID