【发布时间】:2019-07-29 08:04:37
【问题描述】:
我正在尝试通过对不同的元列进行分组来让 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 |
|---------------------|------------------|
这可能吗?
【问题讨论】:
-
LEFT JOIN返回常规的INNER JOIN结果,因为您在WHERE子句中有外部表条件。将城市条件移至ON子句以获得真正的LEFT JOIN结果。
标签: mysql sql database wordpress