Đây là cách bạn có thể làm điều này
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 ;
Ý tưởng là gán một rn
giá trị cho từng mục trong bảng và cần đảm bảo rằng các giá trị này luôn theo thứ tự tăng dần
Vì vậy, nếu bạn chạy truy vấn cho mỗi bảng, bạn sẽ có
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)
Tại đây, bạn có thể thấy table1 rn
các giá trị là 1,2,3,....
table2
các giá trị là 1.5,2.5,3.5,....
table3
các giá trị là 1.6,2.6,....
vì vậy cuối cùng khi bạn sắp xếp kết quả với tất cả rn, nó sẽ là
1,1.5,1.6,2,2.5,2.6,....