我有一个名为 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 |
+----+-----------------+
我需要编写查询的内容:我想通过第一个表获取与第二个表中前 10 个最常用 tagID 的有序列表相对应的 tagNames,但它只查看符合另一个条件的 couponIDs - “区域”是某个区域。最后,只会显示某个区域的前 10 个 tagName。我以前从未做过三表查询,有什么帮助吗?
我试图保留这个纯 SQL,因为我有一个部分可用的 PHP 解决方案,但它很乱而且非常慢。
最佳答案
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
关于mysql - 编写涉及来自三个表的有序数据的 MySQL 查询时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428129/