同样的查询。完全相同的数据集。两个不同的MySQL服务器。两个不同的结果。为什么呢?
SELECT DISTINCT term_taxonomy_id FROM (
SELECT * FROM azEw_term_relationships
WHERE `term_taxonomy_id` IN
(SELECT term_taxonomy_id FROM azEw_term_taxonomy WHERE taxonomy = 'series')
ORDER BY object_id DESC) `series_term_ids`;
我的期望是如果seri_term_ids表被排序,那么SELECT DISTINCT将获取每个term_taxonomy_id的第一行。
服务器1 mysql Ver 14.14 Distrib 5.6.35, for osx10.9 (x86_64) using EditLine wrapper
按所需顺序返回29行:
61424
2221
3529
10404
21993
33
[etc]
服务器2 mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
通过SORTED ASC返回相同的29行。
21
23
30
33
1013
1027
1042
2221
[etc]
这是WordPress查询的一部分,我试图获取按每个学期最近一篇文章排序的分类术语列表。使用post_meta对象ID足够接近最新帖子的日期(我知道它实际上是该术语最近添加的顺序,但是它足够接近并且避免连接到wp_posts表)。 WordPress查询在这里(完全可以修改它):
<?php
global $wpdb;
$query = "
SELECT DISTINCT term_taxonomy_id
FROM ( SELECT *
FROM $wpdb->term_relationships
WHERE `term_taxonomy_id` IN
( SELECT term_taxonomy_id
FROM $wpdb->term_taxonomy
WHERE taxonomy = 'series' )
ORDER BY object_id DESC ) `series_term_ids`";
$output = 'ARRAY_A';
$series_array = $wpdb->get_results( $query, $output );
$s_terms = get_terms( array(
'taxonomy' => 'series',
'orderby' => 'include',
'include' => array_column( $series_array, 'term_taxonomy_id' ),
'hide_empty' => 1
) );
?>
答案 0 :(得分:1)
我的期望是如果要对seri_term_ids表进行排序,那么选择SELECT DISTINCT将获取每个term_taxonomy_id的第一行。
在这种情况下,MySQL不保证订单。
你最好更像是字面意思并做类似的事情:
SELECT A
FROM (...) AS theSubQ
GROUP BY A
ORDER BY MAX(B) DESC
;