按术语顺序自定义SQL查询顺序

按术语顺序自定义SQL查询顺序,sql,wordpress,sql-order-by,Sql,Wordpress,Sql Order By,我有一个自定义分类法,它在“系列”下列出了术语,其中包含的文章也在“媒体类型”下的术语中出现,其中媒体类型是术语id 16 我想按terms表中的term_order列对列表进行排序,但它不起作用 我做错了什么 $q_result = $wpdb->get_col(" SELECT DISTINCT {$wpdb->terms}.name FROM {$wpdb->terms} INNER JOIN {$wpdb->term_taxono

我有一个自定义分类法,它在“系列”下列出了术语,其中包含的文章也在“媒体类型”下的术语中出现,其中媒体类型是术语id 16

我想按terms表中的term_order列对列表进行排序,但它不起作用

我做错了什么

$q_result = $wpdb->get_col("
    SELECT DISTINCT {$wpdb->terms}.name 
    FROM {$wpdb->terms}
        INNER JOIN {$wpdb->term_taxonomy} 
            ON {$wpdb->term_taxonomy}.term_id = {$wpdb->terms}.term_id
        INNER JOIN {$wpdb->term_relationships} 
            ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
    WHERE {$wpdb->term_taxonomy}.taxonomy = 'series' 
        AND {$wpdb->term_relationships}.object_id IN (
            SELECT object_id 
            FROM {$wpdb->term_relationships}
                INNER JOIN {$wpdb->term_taxonomy} 
                    ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
            WHERE {$wpdb->term_taxonomy}.taxonomy = 'media_type' 
                AND {$wpdb->term_taxonomy}.term_id = '16'
            ORDER BY {$wpdb->terms}.term_order 
        );"
);

看起来您的order by嵌套在select IN(…)子句中。尝试将结束语上移一行,并在外部子句中保留“订单”部分:

    AND {$wpdb->term_taxonomy}.term_id = '16')
ORDER BY {$wpdb->terms}.term_order;"
实际上,您正在对IN子句的结果进行排序,这并没有改变项目实际返回给您的顺序

注意:我原来的帖子错误地说“将右括号和分号上移一行”。你只需要移动括号。如果移动分号,则会提前终止SQL。对不起

已经回答了
在您的案例中,您引用的是
orderby{$wpdb->terms}.term_-ORDER
,默认情况下,在
wordpress
wp-terms
表中没有此列
term_-ORDER
列位于
wp\term\u关系表中

我按{$wpdb->terms}下订单。term\u-ORDER位于第一个结束标记之后);但是它显示了一个空数组你能发布你说的查询返回一个空数组吗?我用的是echo“”;打印(q_结果);回声“;查看查询结果。我还没有试过发帖,我成功了!我不得不删除第一个右括号中的分号。你是如何发布阵列的?我不确定到底发生了什么。我在上面发布的查询中只看到一个右括号和分号,但我很高兴它能正常工作。我进入phpMyAdmin,wp_terms表有一个名为term_order的列。我正在使用一个插件将数字分配给术语。