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);
我正在尝试过滤 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);