0

我有自定义分类法,其中列出了“系列”下的术语,其中包含的帖子也出现在“media_type”下的术语中,其中 media_type 是 term_id 16。

我想按术语表中的 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 
        );"
);
4

2 回答 2

1

看起来您的 order by 嵌套在 select IN (...) 子句中。尝试将结束括号向上移动一行并将 term_order 部分留在外部子句中:

    AND {$wpdb->term_taxonomy}.term_id = '16')
ORDER BY {$wpdb->terms}.term_order;"

实际上,您正在对 IN 子句的结果进行排序,该子句不会更改项目实际返回给您的顺序。

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

于 2013-04-12T19:01:08.250 回答
0

已经在那里回答了 在您的情况下,您指ORDER BY {$wpdb->terms}.term_order的是默认情况下,wordpress wp_terms表中没有此列,该term_order列位于wp_term_relationships表中

于 2013-04-12T19:41:45.910 回答