我在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查询功能,但如果可能的话,我想以这种方式运行查询。
答案 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
没有任何聚合函数会给你 不确定的结果