mysql - SQL - 按另一个具有多行的 SQL 语句分组

标签 mysql sql database wordpress

我试图通过对不同的元列进行分组来使 wordpress 的 SQL 语句正常工作。

我有一张表有选票,一张表有位置和一张表有一些城市的引用链接(每个城市可以包含多个位置)。

我试图根据每个大城市对所有投票进行分组,但我在将两个 SQL 语句合二为一时遇到了一些问题。

下面是获取投票数前 50 名位置的查询:

SELECT Count(*) as Amount, meta.meta_value as Location FROM wp_votes as votes
LEFT JOIN wp_postmeta as meta ON votes.`post_id` = meta.`post_id`
WHERE meta.meta_key = 'location'
AND votes.`post_id` IS NOT NULL AND votes.`post_id` <> 0
GROUP BY meta.meta_value
ORDER BY Amount DESC
LIMIT 50;

这会返回这样的响应:

|---------------------|------------------|
|      Amount         |     meta_value   |
|---------------------|------------------|
|       1250          |      Brooklyn    |
|---------------------|------------------|
|       400           |     Manhattan    |
|---------------------|------------------|
|       300           |     Chicago      |

这里是根据位置获取城市的查询。它会返回一个城市列表(在上面的示例中,它只会返回纽约),并且“布鲁克林”和“曼哈顿”这两个位置将被“包含”在纽约中。

SELECT meta_value FROM wp_posts as location
LEFT JOIN wp_postmeta as city ON city.`post_id` = location.`ID`
WHERE city.`meta_key` = 'reference'
GROUP BY city.`meta_value`;

这里的想法是将这两个查询映射到一起,这样如果第一个查询的位置与第二个查询的位置匹配,它将按城市名称对行进行分组。

因此组合查询的输出将是:

|---------------------|------------------|
|      Amount         |     meta_value   |
|---------------------|------------------|
|       1650          |      New York    |
|---------------------|------------------|
|       300           |     Chicago      |
|---------------------|------------------|

这可能吗?

最佳答案

只需包含第二个 JOIN 即可获取引用:

SELECT c.meta_value as city, Count(*) as Amount 
FROM wp_votes v LEFT JOIN
     wp_postmeta l
     ON v.`post_id` = l.`post_id` AND
        l.meta_key = 'location' LEFT JOIN
     wp_postmeta c
     ON l.id = c.`post_id` AND
        c.meta_key = 'city'
WHERE v.`post_id` IS NOT NULL AND v.`post_id` <> 0
GROUP BY c.meta_value
ORDER BY Amount DESC
LIMIT 50;

关于mysql - SQL - 按另一个具有多行的 SQL 语句分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043739/

相关文章:

MYSQL - 多选和 LIKE 方法

mysql - 多个消费者尝试更新 Mysql(5.7 版本)表的同一行。如何解决并发更新问题

mysql - 从同一表列更新列

mysql - 如何使用 SQL 计算留存率?

php - 仅在为空时获取结果

node.js - 如何使用 MongoDB 创建关系?

php - Foreach 循环不会将 Quickbooks 中的所有记录插入 MySQL 数据库。

mysql - 如果我的应用程序在保存数据之前已经验证了数据,为什么我需要对列使用 UNIQUE 约束?

database - 如何在 SQLIte 中获取子字符串?

mysql - 如何在站点中存储评论?