簡體   English   中英

SQL 查詢不適用於多個條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM