【问题标题】:Wordpress MySQL query with WHERE clause after GROUP_CONCAT returns unexpected resultsGROUP_CONCAT 后带有 WHERE 子句的 Wordpress MySQL 查询返回意外结果
【发布时间】:2014-04-10 22:21:18
【问题描述】:
            SELECT p.*,
        GROUP_CONCAT(pm.meta_key ORDER BY pm.meta_key DESC SEPARATOR '||') as meta_keys, 
        GROUP_CONCAT(pm.meta_value ORDER BY pm.meta_key DESC SEPARATOR '||') as meta_values
        FROM $wpdb->posts p 
        LEFT JOIN $wpdb->postmeta pm on pm.post_id = p.ID 
        WHERE p.post_type = 'item' and p.post_status = 'publish' 
        AND pm.meta_key = 'adtype' 
        AND pm.meta_value = '1'
        GROUP BY p.ID
        ORDER BY p.post_date_gmt DESC
        LIMIT 0,10

我正在使用特殊的 WordPress 查询来获取 post 和 postmeta 数据,当我想在 postmeta 上添加额外的 WHERE 时遇到了问题。

这里我想限制 pm.meta_key adtype 等于 1 的结果。查询有效,但 var_dump() 显示它更改了连接 meta_keys 和 meta_values 组的值。

在我的结果中,我不再将 meta_keys 和 meta_values 作为串联结果,而是分别设置为“adtype”和“1”的 WHERE 值。

查询无需额外的 WHERE 子句即可工作,但我希望能够过滤结果。

【问题讨论】:

    标签: php mysql sql wordpress group-concat


    【解决方案1】:

    正常,当你添加WHERE 子句时:

        AND pm.meta_key = 'adtype' 
        AND pm.meta_value = '1'
    

    您将结果限制为仅具有这些值的行,因此在您的 meta_keys 和 meta_values 中,您的值不会与 WHERE 子句中指定的值不同。

    【讨论】:

    • 好的.. 所以当我对这些 WHERE 子句进行 group_concat 时,设置的唯一值是 adtype 和 1。这是有道理的,但现在我该如何过滤这些结果?
    • 您要按哪个字段过滤?
    • 您想要过滤adtype 并且想要在您的meta_keys 中包含所有值(不仅是广告类型)?
    • 是的.. 我已经很接近用这个查询做我想做的事了,但正如你提到的那样,我试图获取数据的方式不起作用。如果数据都在一个表中会简单得多。 ://
    • 是否可以在 WHERE 子句中以某种方式使用 max(case when pm.meta_key='adtype' then pm.meta_value end) 的结果?
    【解决方案2】:

    我自己在这个帖子中找到了解决方案:Can't get a complicated mysql query to work

    在 SELECT 语句中,我为 adtype 赋予了一个新值:

    max(当 pm.meta_key='adtype' 然后 pm.meta_value end) as adtype

    在 GROUP BY 之后我添加了:

    HAVING adtype = '1'

    成功了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多