gpt4 book ai didi

php - wordpress postmeta 自定义查询问题

转载 作者:行者123 更新时间:2023-11-29 03:01:24 25 4
gpt4 key购买 nike

我正在尝试构建一个自定义查询,该查询将检查特定的 postmeta 字段以供查看。当我不使用“AND (b.meta_key = 'x' AND b.meta_value = 'y')”时,我遇到了返回太多行的问题。

有时,我会使用“b”……但并非总是如此。

在下面的第二个查询中,我得到了 18 行返回(每个元字段填写一个 + 1 个)。如何更正此问题,以便我可以有多个 postmeta 匹配项,而不是返回所有行。

此查询返回 1 个帖子

SELECT wp_posts.* 
FROM
wp_posts,
wp_postmeta a
WHERE
wp_posts.ID = a.post_id

AND (
a.meta_key = 'property_space_requirement'
AND a.meta_value = '1000'
)

AND wp_posts.post_status = 'publish'
AND wp_posts.post_date < NOW()
ORDER BY wp_posts.post_date DESC

这个查询返回 18 个帖子 - 如果我不使用“AND b”,我希望它只从上面返回 1

SELECT wp_posts.* 
FROM
wp_posts,
wp_postmeta a,
wp_postmeta b
WHERE
wp_posts.ID = a.post_id
AND wp_posts.ID = b.post_id

AND (
a.meta_key = 'property_space_requirement'
AND a.meta_value = '1000'
)

AND wp_posts.post_status = 'publish'
AND wp_posts.post_date < NOW()
ORDER BY wp_posts.post_date DESC

此查询返回 1 个帖子

SELECT wp_posts.* 
FROM
wp_posts,
wp_postmeta a,
wp_postmeta b
WHERE
wp_posts.ID = a.post_id
AND wp_posts.ID = b.post_id

AND (
a.meta_key = 'property_space_requirement'
AND a.meta_value = '1000'
)

AND (
b.meta_key = 'xx'
AND b.meta_value = 'yy'
)

AND wp_posts.post_status = 'publish'
AND wp_posts.post_date < NOW()
ORDER BY wp_posts.post_date DESC

最佳答案

处理 postmeta 可能会让人头疼;您基本上需要为要查找的每个键值创建一个虚拟表。

您似乎想要具有 property_space_requirement = 1000 和 xx = yy 的帖子,以及一些帖子标准。

这是您的 postmeta 虚拟表。

 SELECT post_id AS ID,
meta_value AS property_space_requirement
FROM wp_postmeta
WHERE meta_key = 'property_space_requirement'

xx/yy 同上

 SELECT post_id AS ID,
meta_value AS xx
FROM wp_postmeta
WHERE meta_key = 'xx'

然后你需要像这样LEFT JOIN这些虚拟表到posts表

SELECT p.*
FROM wp_posts AS p
LEFT JOIN (
SELECT post_id AS ID,
meta_value AS property_space_requirement
FROM wp_postmeta
WHERE meta_key = 'property_space_requirement'
) AS a ON p.ID = a.ID
LEFT JOIN (
SELECT post_id AS ID,
meta_value AS xx
FROM wp_postmeta
WHERE meta_key = 'xx'
) AS b ON p.ID = b.ID
WHERE p.post_status = 'publish'
AND p.post_date < NOW()
AND a.property_space_requirement = 1000
AND b.xx = 'yy'
ORDER BY p.post_date DESC

这里的技巧是使用子查询将 postmeta 的一个键值转换为结果集中的一列,然后使用 WHERE 子句对其进行过滤。

请注意,您可以在此设置中使用各种更精细的 WHERE 过滤器。例如,您可以进行更精细的范围搜索,如下所示。

 WHERE ...
AND ( (a.property_space_requirement <= 1000 AND b.xx = 'yy')
OR(a.property_space_requirement > 1000 AND b.xx = 'zz') )
ORDER BY a.property_space_requirement DESC

您可以通过 LEFT JOINing 新的虚拟表(如已显示的两个)向查询添加任意数量的键/值条件。

注意:WordPress 核心团队刚刚宣布他们将在明年淘汰旧的 mysql_ 界面。查看如何使用 WordPress 的内部 wpdb 类。

关于php - wordpress postmeta 自定义查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096604/

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