如何解决SQL 查询不适用于多个条件
我正在尝试过滤帖子, 但查询不适用于多个条件
SELECT disTINCT
p.ID as ID,p.post_title as post_title
FROM wp_posts p
INNER JOIN wp_ulisting_listing_attribute_relationships ular ON ular.listing_id = p.ID
WHERE
p.post_type='listing'
AND p.post_status='publish'
AND ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023
AND ular.attribute='price' AND ular.value BETWEEN 6500000 AND 100888000
如果我删除 AND ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023
或
AND ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023
它有效。
与此查询相同的事情
SELECT disTINCT
p.ID as ID,p.post_title as post_title
FROM wp_posts p
INNER JOIN wp_term_relationships tr ON tr.object_id = p.ID
INNER JOIN wp_ulisting_listing_type_relationships ultr ON ultr.listing_id = p.ID
INNER JOIN wp_ulisting_listing_attribute_relationships ular ON ular.listing_id = p.ID
WHERE
p.post_type='listing'
AND p.post_status='publish'
AND ular.attribute='beds' AND ular.value=274
AND tr.term_taxonomy_id in (251)
AND ular.attribute='status'AND ular.value=130
AND ular.attribute='stories' AND ular.value=267
AND ultr.listing_type_id=7125
仅当我只留下一个 ular.
条件时才有效,但所有演示数据都来自一篇文章。
注意:我已经发布了具有此属性的帖子。
谢谢
解决方法
这个条件:
ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023
还有这个:
ular.attribute='price' AND ular.value BETWEEN 6500000 AND 100888000
不能为同一行。
也许你想要:
AND (
(ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023)
OR
(ular.attribute='price' AND ular.value BETWEEN 6500000 AND 100888000)
)
出于同样的原因,在您的第二个查询中,这些条件是互斥的:
ular.attribute='beds' AND ular.value=274
ular.attribute='status'AND ular.value=130
ular.attribute='stories' AND ular.value=267
将它们更改为:
AND (
(ular.attribute='beds' AND ular.value=274)
OR
(ular.attribute='status'AND ular.value=130)
OR
(ular.attribute='stories' AND ular.value=267)
)
或者:
AND (ular.attribute,ular.value) IN (('beds',274),('status',130),('stories',267))
,
在以下条件下,您实际上是在尝试“找到属性值等于 'Square_feet' 和 'Price' 的行”。不可能吧?一行中的一列可以有一个值。
您必须使用 OR(如下所示),表示“查找值为 Square_feet 或 Price”的行。
对于第一次查询
-----Your conditions------
ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023
AND ular.attribute='price' AND ular.value BETWEEN 6500000 AND 100888000
----------Correct way of writing it--------
AND ((ular.attribute='square_feet' AND ular.value BETWEEN 11011 AND 11023)
OR (ular.attribute='price' AND ular.value BETWEEN 6500000 AND 100888000))
对于第二个查询条件
-----Your conditions------
ular.attribute='status'AND ular.value=130
And ular.attribute='stories' AND ular.value=267
----------Correct way of writing it--------
AND ((ular.attribute='status'AND ular.value=130)
OR (ular.attribute='stories' AND ular.value=267))
,
我很确定您希望所有属性与帖子相匹配。为此,请使用聚合。你真正想要完成的事情相当不清楚,但像这样:
SELECT p.ID,p.post_title
FROM wp_posts p JOIN
wp_term_relationships tr
ON tr.object_id = p.ID JOIN
wp_ulisting_listing_type_relationships ultr
ON ultr.listing_id = p.ID JOIN
wp_ulisting_listing_attribute_relationships ular ON ular.listing_id = p.ID
WHERE p.post_type = 'listing' AND
p.post_status = 'publish' AND
tr.term_taxonomy_id in (251) AND
ultr.listing_type_id = 7125
GROUP BY p.ID,p.post_title
HAVING SUM(ular.attribute = 'beds' AND ular.value = 274) > 0 AND
SUM(ular.attribute = 'status' AND ular.value = 130) > 0 AND
SUM(ular.attribute = 'stories' AND ular.value = 267);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。