自定义SQL查询ORDER BY term_order

时间:2013-04-12 18:56:23

标签: sql wordpress sql-order-by

我有自定义分类,列出“系列”下的字词,其中包含“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 
        );"
);

2 个答案:

答案 0 :(得分:1)

看起来您的order by嵌套在select IN(...)子句中。尝试将关闭的paren向上移动一行,并将term_order部分保留在外部子句中:

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

实际上,您正在订购IN子句的结果,该结果不会改变项目实际返回给您的顺序。

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

答案 1 :(得分:0)

已经回答there 在您的情况下,您引用的是ORDER BY {$wpdb->terms}.term_order,而wordpress wp_terms表中的默认值没有此列,term_order列位于wp_term_relationships表中