SQL 查询不适用于多个条件

SQL query not working with multiple condition

我正在尝试过滤 posts, 但查询不适用于多个条件

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. 条件时才有效,但所有演示数据都来自一个 post.

注:我有post这个属性。

谢谢

这个条件:

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))

我很确定您希望 所有 属性与 post 相匹配。为此,请使用聚合。你真正想要完成的事情还不清楚,但是是这样的:

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);