Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann man das Ergebnis mehrerer Abfragen alternativ sortieren?

So können Sie dies tun

select @rn:[email protected]+1 as id,colors from (
  (select @rn1:= @rn1+1 as rn,colors from table1,(select @rn1:=0)x order by id )
   union all 
  (select @rn2:= @rn2+1 as rn,numbers as colors from table2,(select @rn2:=0.5)x order by id)
   union all 
  (select @rn3:= @rn3+1 as rn,names as colors from table3,(select @rn3:=0.6)x order by id )
)x,(select @rn:=0)y order by rn ;

Die Idee ist, einen rn zuzuweisen Wert für jedes Tabellenelement und müssen sicherstellen, dass diese Werte immer in aufsteigender Reihenfolge sind

Wenn Sie also die Abfrage für jede Tabelle ausführen, erhalten Sie

mysql> select @rn1:= @rn1+1 as rn,colors from table1,(select @rn1:=0)x order by id;
+------+--------+
| rn   | colors |
+------+--------+
|    1 | red    |
|    2 | green  |
|    3 | blue   |
|    4 | yellow |
+------+--------+
4 rows in set (0.00 sec)

mysql> select @rn2:= @rn2+1 as rn,numbers as colors from table2,(select @rn2:=0.5)x order by id;
+------+--------+
| rn   | colors |
+------+--------+
|  1.5 | ten    |
|  2.5 | two    |
|  3.5 | one    |
|  4.5 | three  |
|  5.5 | six    |
|  6.5 | five   |
+------+--------+
6 rows in set (0.00 sec)

mysql> select @rn3:= @rn3+1 as rn,names as colors from table3,(select @rn3:=0.6)x order by id;
+------+--------+
| rn   | colors |
+------+--------+
|  1.6 | jack   |
|  2.6 | peter  |
+------+--------+
2 rows in set (0.00 sec)

Hier sehen Sie table1 rn Werte sind 1,2,3,.... table2 Werte sind 1.5,2.5,3.5,.... table3 Werte sind 1.6,2.6,....

Wenn Sie also das Ergebnis mit allen rn bestellen, wird es als

angezeigt

1,1.5,1.6,2,2.5,2.6,....