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,....