【问题标题】:How to inner join from another table and order by specific row value?如何从另一个表内部连接并按特定行值排序?
【发布时间】:2017-09-05 10:47:30
【问题描述】:

在 WordPress 中,有 2 个表:wp_terms 和 wp_termmeta。

我目前执行以下操作来获取条款和父母等:

$query = mysqli_query($mysqli, "
SELECT wp_terms.term_id,wp_terms.name, wp_term_taxonomy.parent
FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_term_taxonomy.taxonomy = 'post-categories'
ORDER BY name"); 

但是 - 我需要访问 wp_termmeta 表,选择 term_id 相同且 meta_key 为“order”的行,然后按 wp_termmeta 的 meta_value 排序,而不是当前的名称。

我将如何处理当前查询?

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

    我没有特定于 wordpress 的知识,但根据您的描述,查询可能看起来像这样(为了便于阅读,我添加了表别名,但它们不是必需的):

    SELECT t.term_id, t.name, tax.parent
    FROM wp_terms t
    INNER JOIN wp_term_taxonomy tax ON t.term_id = tax.term_id
    INNER JOIN wp_termmeta m ON m.term_id = t.term_id AND m.meta_key = 'order'
    WHERE tax.taxonomy = 'post-categories'
    ORDER BY m.meta_value
    

    这里最有趣的部分是第二次join的join条件,其中包含两个条件:m.term_id = t.term_id AND m.meta_key = 'order' 它首先确保术语 id 匹配,然后确保连接行的元键实际上是“顺序”。

    【讨论】:

    • 这很好用,谢谢。我现在也得到了它想要做的事情,而在我试图在后类别之后做一个单独的 WHERE 子句之前,而我现在看到它只需要一个 AND 连接。
    猜你喜欢
    • 2018-01-07
    • 2012-07-16
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多