我有一个名为tags
的表,如下所示:
+-------+----------+
| 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的有序列表,但它只查找符合其他条件的couponIDs - “区域”是某个区域。最后,只显示某个区域的前10个tagNames。我之前从未做过三表查询,有什么帮助吗?
我正在尝试保留这个纯粹的SQL,因为我有一个部分工作的PHP解决方案,但它很混乱而且非常慢。
答案 0 :(得分: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