gpt4 book ai didi

mysql - 如何在已准备好具有多个联接的数据库上执行之间查询?

转载 作者:行者123 更新时间:2023-11-29 14:09:58 25 4
gpt4 key购买 nike

我正在尝试编写一个查询来检查保存时自定义帖子类型(属性)中的自定义元值是否等于另一个自定义帖子类型(警报)中的元值

我可以在正常匹配字段中使用此功能,但是我试图让它在一定范围内工作,例如,如果“属性”中的“卧室”位于“警报”中的“a_bedrooms_min”和“a_bedrooms_max”之间。到目前为止,我的查询如下所示:

//Property Meta Fields
$meta_type = 'flat';
$meta_bedrooms = '2';

//Alert Meta Fields
a_bedrooms_min = 1
a_bedrooms_max = 3

SELECT ID
FROM wp_posts
INNER JOIN wp_postmeta m1
ON ( wp_posts.ID = m1.post_id )
INNER JOIN wp_postmeta m2
ON ( wp_posts.ID = m2.post_id )
INNER JOIN wp_postmeta m3
ON ( wp_posts.ID = m3.post_id )
WHERE
wp_posts.post_type = 'alerts'
AND wp_posts.post_status = 'publish'
AND ( m1.meta_key = 'a_property_type' AND m1.meta_value = '$meta_type' )
AND ( m2.meta_key = 'a_bedrooms_min' AND m2.meta_value >= '$meta_bedrooms' )
AND ( m3.meta_key = 'a_bedrooms_max' AND m3.meta_value <= '$meta_bedrooms' )
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date
DESC;

最后两个 AND 显然不适用于我正在尝试做的事情,但如何才能使其发挥作用?

谢谢罗伯特

最佳答案

我认为你很接近。你有一个混合旧的 ANSI 和更明确的 JOIN。正如您在此示例中所看到的,3 个条件中的每一个都显式连接到所有 3 个部分的元表。因此,每个 ID 只应出现一次,因为每个元数据最多应返回一条记录,并且仅当所有 3 个元数据都找到相应的匹配项时,该记录才符合资格。

SELECT 
ID
FROM
wp_posts

INNER JOIN wp_postmeta m1
ON wp_posts.ID = m1.post_id
AND m1.meta_key = 'a_property_type'
AND m1.meta_value = '$meta_type'

INNER JOIN wp_postmeta m2
on wp_posts.ID = m2.post_id
AND m2.meta_key = 'a_bedrooms_min'
AND m2.meta_value <= '$meta_bedrooms'

INNER JOIN wp_postmeta m3
on wp_posts.ID = m3.post_id
AND m3.meta_key = 'a_bedrooms_max'
AND m3.meta_value >= '$meta_bedrooms'

WHERE
wp_posts.post_type = 'alerts'
AND wp_posts.post_status = 'publish'

GROUP BY
wp_posts.ID

ORDER BY
wp_posts.post_date DESC;

我进行了修改,因为我相信 <= 和 >= 实际上是向后的。例如,您的元值中的最小卧室数为 1,最大卧室数为 3...您正在寻找 2 间卧室才符合资格。

因此,您需要 MIN_BEDROOMS <= 2 并且 2 <= MAX_BEDROOMS最初提出的是 MIN_BEDROOMS >= 2 (1 永远不会大于 2)并且 MAX_BEDROOMS <= 2(2 永远不会小于 2)。

再试一次。

关于mysql - 如何在已准备好具有多个联接的数据库上执行之间查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com