gpt4 book ai didi

php - 选择某些值为 true 的帖子 ID,并使用其中的值对它们进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:28 26 4
gpt4 key购买 nike

老问题( #1 , #2 ),我仍然在为这个问题苦苦挣扎。现在尝试使用简单的 SQL 查询:

global $wpbd;
$post_table = $wpdb->prefix . 'posts';
$meta_table = $wpdb->prefix . 'postmeta';
$fs_query = "SELECT $post_table.ID
FROM $post_table
INNER JOIN $meta_table
ON ( $post_table.ID = $meta_table.post_id )
WHERE 1=1
AND $post_table.post_type = 'services'
AND $post_table.post_status = 'publish'
AND (
$meta_table.meta_key = 'example_featured'
AND $meta_table.meta_value = 1
)
AND $meta_table.meta_key = 'example_sort'
GROUP BY $post_table.ID
ORDER BY $meta_table.meta_value+0 ASC
LIMIT 0, 8";
my_var_dump($fs_query);

表 1:wp_posts

+------------+--------------+----------------+|     ID     |   post_type  |   post_status  |+------------+--------------+----------------+|     1      |   services   |     publish    |+------------+--------------+----------------+

表 2:wp_postmeta

+------------+------------+------------------+--------------+|     ID     |   post_id  |     meta_key     |  meta_value  |+------------+------------+------------------+--------------+|     1      |      1     | example_featured |       1      ||     2      |      1     | example_sort     |       5      |+------------+------------+------------------+--------------+

努力进行此 SQL 查询:
我想要所有 post_id,其中 post_type = 'services',post_status = 'publish',以及关联 meta_value 的值(example_featured) 为 1(一)。然后想使用我使用另一个 meta_key (example_sort) 传递的另一个元值对结果进行排序。如果我从查询中删除 AND $meta_table.meta_key = 'example_sort' 然后获取这些帖子 ID,但是使用上面的查询我什么也得不到。

我该怎么做?

最佳答案

您已经在执行group by,因此您可以使用条件聚合来解决这个问题。这意味着将一些条件移动到 having 子句中。我还介绍了表别名——它们使查询更易于编写和阅读:

SELECT p.ID
FROM $post_table p INNER JOIN
$meta_table m
ON (p.ID = m.post_id )
WHERE p.post_type = 'services' AND
p.post_status = 'publish'
GROUP BY p.ID
HAVING SUM(m.meta_key = 'example_featured' AND m.meta_value = 1) > 0
ORDER BY MAX(CASE WHEN m.meta_key = 'example_sort' then m.meta_value end)
LIMIT 0, 8;

这是一个集内集查询的示例——也就是说,您正在查看给定帖子的所有元键的逻辑。该逻辑有两部分,过滤部分(在“example_featured”上)和排序部分(在“example_sort”上)。您遇到的问题是此信息位于元表中的两个不同行上。

HAVING 子句计算满足“example_featured”条件的行数。如果遇到任何情况,则 SUM() 大于 0。顺便说一句,如果您想保证该值从不在那里,那么您可以使用 = 0 而不是 > 0

ORDER BY 子句从键为“example_sort”的行中提取值。如果有多个匹配项,则使用最大值。如果没有匹配项,则 MAX() 表达式的结果为 NULL,并进行相应排序。

关于php - 选择某些值为 true 的帖子 ID,并使用其中的值对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828910/

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