定制SQL查询 - 基于2个(或更多)postmeta字段访问记录

时间:2014-11-28 08:52:23

标签: php mysql wordpress

我在Wordpress上运行一个网站,我正在尝试根据2个(或更多)字段从postmeta表中获取信息。这是我到目前为止的查询:

SELECT wp_postmeta.* FROM wp_postmeta
LEFT JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_status = 'publish'
AND wp_posts.post_type = 'post'
AND ( wp_postmeta.meta_key = 'relevantLine' AND wp_postmeta.meta_value = '339' )
AND (
( wp_postmeta.meta_key = 'brandOne' AND wp_postmeta.meta_value = '30' )
OR ( wp_postmeta.meta_key = 'brandTwo' AND wp_postmeta.meta_value = '30' )
OR ( wp_postmeta.meta_key = 'brandThree' AND wp_postmeta.meta_value = '30' )
)
AND wp_posts.post_date >= '2014-03-25'
AND wp_posts.post_date <= '2014-11-27'
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC 

我正在尝试访问将postmeta键“relevantLine”设置为339且将postmeta键“brandOne”设置为30(或“brandTwo”设置为30,或“brandThree”设置为30)的记录。

有没有人知道如何做到这一点?

以上查询无效。

非常感谢

PS。我知道我可以使用wp查询功能,但如果可能的话,我想以这种方式运行查询。

1 个答案:

答案 0 :(得分:2)

您可以重写以下内容

SELECT m.* ,m1.*
FROM wp_postmeta m
JOIN wp_posts p ON p.ID = m.post_id
JOIN wp_postmeta m1 ON p.ID = m1.post_id
WHERE p.post_status = 'publish'
AND p.post_type = 'post'
AND  m.meta_key = 'relevantLine' AND m.meta_value = '339' 
AND m1.meta_key IN ('brandOne','brandThree','brandTwo')
AND m1.meta_value = '30'
AND p.post_date >= '2014-03-25'
AND p.post_date <= '2014-11-27'
GROUP BY p.ID
ORDER BY p.post_date DESC 

这个结构是调用EAV实体属性值,并且为了在不同键之间进行匹配,你必须加入表作为你要比较的不同键,我只添加了一个连接到wp_postmeta和单个键的键值为30我使用IN()来简化您的查询。

  

注意使用GROUP BY没有任何聚合函数会给你   不确定的结果