mysql - 编写涉及来自三个表的有序数据的 MySQL 查询时遇到问题

标签 mysql sql

我有一个名为 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/

相关文章:

Mysql交叉矩阵

PHP - 无法回显返回数组中的值

sql - Oracle 减号和联合运算顺序/优先级

从 DB2 迁移时 MySQL 触发器创建错误

mysql - 如何在 SQL 中选择没有空值的行(在任何列中)?

php - 无法在 MySQL 数据库中插入表单数据

php - 如何检查数据库连接

mysql - 如何优化带有重复子查询的大查询

sql - 使用sql查询总结时间列

mysql - 按 RAND() 排序的 SQL