GROUP_CONCAT返回意外结果后,带有WHERE子句的Wordpress MySQL查询

时间:2014-03-07 16:39:57

标签: php mysql sql wordpress group-concat

            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

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

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

在我的结果中,我不再将meta_keys和meta_values作为连接结果取出,而是将它们分别设置为'adtype'和'1'的WHERE值。

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

2 个答案:

答案 0 :(得分:0)

添加WHERE子句时,这是正常的:

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

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

答案 1 :(得分:0)

我在这个主题中找到了解决方案:Can't get a complicated mysql query to work

在SELECT语句中,我为adtype提供了一个新值:

max(pm.meta_key ='adtype'然后pm.meta_value结束时的情况)为adtype

在GROUP BY之后我添加了:

具有adtype ='1'

这很有用!