当前位置: 首页 > 知识库问答 >
问题:

选择post id,其中一些值为true,并用其中的一个值对其进行排序

秦承安
2023-03-14

这是一个古老的问题(#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);
+------------+--------------+----------------+
|     ID     |   post_type  |   post_status  |
+------------+--------------+----------------+
|     1      |   services   |     publish    |
+------------+--------------+----------------+
+------------+------------+------------------+--------------+
|     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)传递的另一个元值对结果进行排序。如果我从查询中删除和$meta_table.meta_key='example_sort',那么就会得到这些post ID,但对于上面的查询,我什么也得不到。

我该怎么做呢?

共有1个答案

伯晨
2023-03-14

您已经在执行groupby,因此可以使用条件聚合来实现此操作。这意味着将一些条件移到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;

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

having子句计算满足“example_featured”条件的行数。如果遇到任何情况,则sum()大于0。顺便说一句,如果您希望保证该值永远不存在,那么您将使用=0而不是0

 类似资料:
  • 问题内容: 我有一个pandas数据框。我想按升序打印其列之一的唯一值。这就是我的做法: 问题是我得到了输出。 问题答案: 从iterable中返回一个新的排序列表。 码 输出值

  • 我刚开始写CSV文件,有一个场景我找不到答案。我需要生成一个没有标题的CSV文件,其中数字值不带引号,字符串带引号。例如-71,72,“初始”,“2020-10-01”。 我使用的CSVWriter构造函数: 我试图用双引号填充字符串值,但这不起作用。 输出为: 我必须。toString ID,因为writeAll()和writeNext()函数似乎采用字符串数组,并且不接受任何类型的数组。 我想

  • 问题内容: 我想获取特定的列值a.id并将其存储到变量v_id中。然后使用此值传递到存储过程。 我在Oracle SQL Developer中收到此错误: 错误报告:ORA-06550:第3行,第7列:PLS-00103:遇到以下情况之一时遇到了符号“ V_ID”: :=。(@%;用符号“:=”代替“ V_ID”才能继续。06550. 00000-“行%s,列%s:\ n%s” *原因:通常是PL

  • 问题内容: 假设我有这张桌子(小提琴可用)。 我按行对行进行分组,对于每个组,我都希望从column中获得一个值。但是,我不需要 任何 值,但是我想从具有maximal的行中获取值,并从所​​有这些中获取具有maximal的值。换句话说,我的结果应该是 当前解决方案 我知道一个查询来实现这一点: 题 但是我认为这个查询 很难看 。主要是因为它使用了一个 依赖的子查询 ,感觉就像是真正的性能杀手。因

  • 问题内容: 这个问题已经在这里有了答案 : 如何联接两个列范围在一定范围内的数据框? (5个答案) 2年前关闭。 我需要在一个标识符和一个数据帧中的日期位于另一个数据帧中的两个日期之间的条件下合并两个熊猫数据帧。 数据框A具有日期(“ fdate”)和ID(“ cusip”): 我需要将此与此数据框B合并: 在和之间和。 在SQL中,这是微不足道的,但是我看到的如何在pandas中做到这一点的唯一

  • 问题内容: 是否可以在一列中选择2列并合并它们? 例子: 问题答案: 是的,就像您所做的那样: 如果查询数据库,您将得到正确的答案。 发生的事情是您要求表达。一个非常简单的表达式只是一个列名,一个更复杂的表达式中可以包含公式等。