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子句,但我希望能够过滤结果。
答案 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'
这很有用!