【发布时间】:2015-11-12 00:18:28
【问题描述】:
我正在尝试使用 SQL 查询从帖子中获取一些具有角色的用户 - 订阅者、两种帖子类型的数量和一个元值:
SELECT
SUM(CASE WHEN meta_key='wp_capabilities' AND meta_value LIKE '%subscriber%' THEN 1 ELSE 0 END) AS users,
SUM(CASE WHEN post_type='post' AND post_status='publish' THEN 1 ELSE 0 END) AS posts,
SUM(CASE WHEN post_type='updates' AND post_status='publish' THEN 1 ELSE 0 END) AS updates, meta_value AS version
FROM wp_usermeta,wp_posts,wp_postmeta WHERE meta_key='content_version' AND post_id=1
没有结果并显示错误“#1052 - 字段列表中的列'meta_key'不明确”
任何人都可以帮助我做错了吗?
我想要得到的结果视图应该是这样的:
| users | posts | updates | version |
-------------------------------------------
| 2 | 5 | 2 | 1 |
谢谢
更新:
当我使用表别名更新查询时:
SELECT
SUM(CASE WHEN a.meta_key='wp_capabilities' AND a.meta_value LIKE '%subscriber%' THEN 1 ELSE 0 END) AS users,
SUM(CASE WHEN b.post_type='post' AND b.post_status='publish' THEN 1 ELSE 0 END) AS posts,
SUM(CASE WHEN b.post_type='updates' AND b.post_status='publish' THEN 1 ELSE 0 END) AS updates, c.meta_value AS version
FROM wp_usermeta AS a, wp_posts AS b, wp_postmeta AS c WHERE c.meta_key='content_version' AND post_id=1
它带来了错误的结果,似乎 SUM 正在计算表中的每条记录。以前有人遇到过这个问题吗?我正在使用 5.5.44-MariaDB
【问题讨论】:
-
ambiguous 表示列名出现在两个表中。将表名添加到对 meta_key 的每个引用。例如 WHERE wp_usermeta.meta_key='content.....
-
嗨@johnelemans 它为所有结果带来NULL,但肯定有数字
-
逐部分构建查询。做第一个总和以确保它有效。然后添加第二部分。等等。它在哪个部分失败了?
-
一旦出现:SUM(CASE WHEN wp_usermeta.meta_key='wp_capabilities' AND wp_usermeta.meta_value LIKE '%subscriber%' THEN 1 ELSE 0 END) AS users