我试图通过对不同的元列进行分组来使 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/