php - WordPress中SQL查询中的对角无序

标签 php mysql wordpress

我在 WordPress 中执行 SQL 查询时遇到问题,我想将每个帖子 ID 放在带有 meta_key 列的一行中,但我得到了几个不均匀的记录。

SELECT P.ID,
     IF(PM.meta_key = 'nombrem', PM.meta_value, NULL) AS nombrem,
     IF(PM.meta_key = 'generom', PM.meta_value, NULL) AS generom,
     IF(PM.meta_key = 'tiempom', PM.meta_value, NULL) AS tiempom,
     IF(PM.meta_key = 'urlm', PM.meta_value, NULL) AS urlm,
     IF(PM.meta_key = 'imagenm', PM.meta_value, NULL) AS imagenm 
FROM K1nG_posts AS P
LEFT JOIN K1nG_postmeta AS PM ON ( P.ID = PM.post_id ) 
WHERE P.post_type = 'post' 
AND (P.post_status = 'publish' OR P.post_status = 'private')  ORDER BY P.post_date DESC

通过放置上面的代码,我在 phpmyadmin 中得到以下内容,我希望单个帖子 ID 将每个 meta_value 值都放在非对角线水平列中,如图所示。

enter image description here

最佳答案

您似乎在寻找条件聚合。为此,您需要添加一个 GROUP BY 子句并用聚合函数包围您的条件表达式:

SELECT P.ID,
    MAX(CASE WHEN PM.meta_key = 'nombrem' THEN PM.meta_value END) AS nombrem,
    MAX(CASE WHEN PM.meta_key = 'generom' THEN PM.meta_value END) AS generom,
    MAX(CASE WHEN PM.meta_key = 'tiempom' THEN PM.meta_value END) AS tiempom,
    MAX(CASE WHEN PM.meta_key = 'urlm'    THEN PM.meta_value END) AS urlm,
    MAX(CASE WHEN PM.meta_key = 'imagenm' THEN PM.meta_value END) AS imagenm
FROM 
    K1nG_posts AS P
    LEFT JOIN K1nG_postmeta AS PM ON P.ID = PM.post_id 
WHERE 
    P.post_type = 'post' 
    AND (P.post_status = 'publish' OR P.post_status = 'private')  
GROUP BY P.ID, P.post_date
ORDER BY P.post_date DESC

关于php - WordPress中SQL查询中的对角无序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261054/

相关文章:

php - 是否可以使用在 URL 中传递的值来查询数据库,并使用 mod_rewrite 将查询结果写入 URL?

php - 二十十二主题中的样式分页

php - 将自定义字段外部链接添加到文件类别页面

php - ajax 发布数据是否需要 URI 编码?

php - 泰文字符中的 Nominatim 反向地理编码地址显示不正确

php - MySQL用户名不区分大小写

php - 使用 laravel forge 永远运行 artisan 命令?

mysql - 错误: ER_BAD_FIELD_ERROR: Unknown column 'kappa' in 'where clause'

mysql - Rails 4 中的表如何连接?

wordpress - 由于名为 "Clef"的插件,我无法访问我的 WordPress 仪表板