[英]SQL query not working with multiple condition
我正在嘗試獲取過濾后的帖子,但查詢不適用於多個條件
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.