微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL 查询不适用于多个条件

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?