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