ありがとうfuncaポストを残します-誰かが役に立つかもしれません 主な意味-「 中間データではなく、結果をソートする必要があります 。」
。
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
CREATE TABLE `t1` ( `id1` int ( 10 ) unsigned NOT NULL default '0' , `id2` int ( 10 ) unsigned NOT NULL , `k1` decimal ( 6, 5 ) unsigned NOT NULL default '0.00000' , `k2` int ( 10 ) unsigned NOT NULL default '0' , PRIMARY KEY ( `id1` , `id2` ) , KEY `k2` ( `id1` , `k2` ) ) ENGINE = MEMORY;
エンジンのメモリはキーではありません-MyISAMで同じことを確認しました
次に、次のようなデータを入力します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- for ( $ i = 0; $ i <100; $ i ++){
- $ i- > query( 'REPLACE INTO `t1`(` id1`、 `id2`、` k1`、 `k2`)VALUES(?d ,? d ,? f ,? d)' 、
- rand(0,99999)、rand(0,5)、rand(2,99999)/ 50,000、rand(0,20)
- );
- }
そして、そのようなクエリの結果を見てください:
- (
- SELECT `id1`、` k1`、 `k2`
- `t1`から
- WHERE `id2` = 3 AND` k2` = 13
- ORDER BY `k1` DESC
- )
- UNION (
- SELECT `id1`、` k1`、 `k2`
- `k1`から
- WHERE `id2` = 3 AND` k2`!= 13
- ORDER BY `k1` DESC
- )
ここに、上の例の場合:
id1 k1 k2 2726 1.50194 13 88207 0.25084 13 37274 0.96550 11 11059 0.42600 6 11139 1.90196 4 63593 1.42970 5 65273 1.44950 18 28721 0.79328 15 70946 0.87576 4 96673 1.71290 14 49207 1.92928 17 40697 1.82320 18
私たちの意見のバグは、ユニオンの2番目のクエリによって生成されたサンプルでは、中央の列による並べ替えがないことです。
habrasocietyのいずれかがそのような行動に光を当てることができますか
ところで、もちろん、この問題の解決策も共有したいと思います。
- SELECT `id1`、` k1`、 `k2`
- `t1`から
- WHERE `id2` = 3
- ORDER BY if ( `k2` = 13、0、1)、` k1` DESC
2726 1.50194 13 88207 0.25084 13 49207 1.92928 17 11139 1.90196 4 40697 1.82320 18 96673 1.71290 14 65273 1.44950 18 63593 1.42970 5 37274 0.96550 11 70946 0.87576 4 28721 0.79328 15 11059 0.42600 6