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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...