2011-03-25 67 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