sql >> Database >  >> RDS >> Mysql

Hoe het resultaat van meerdere zoekopdrachten afwisselend te sorteren?

Dit is hoe je dit kunt doen

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 ;

Het idee is om een ​​rn . toe te wijzen waarde voor elk tabelitem en u moet ervoor zorgen dat deze waarden altijd in oplopende volgorde staan ​​

Dus als u de query voor elke tabel uitvoert, heeft u

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 zie je table1 rn waarden zijn 1,2,3,.... table2 waarden zijn 1.5,2.5,3.5,.... table3 waarden zijn 1.6,2.6,....

dus als je het resultaat met alle rn bestelt, zal het uiteindelijk zijn als

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




  1. CSV ontleden en exporteren naar Mysql-database in Grails

  2. Database maken in SQL Server met behulp van TSQL of GUI - SQL Server / TSQL-zelfstudie, deel 24

  3. Herschrijven van mysql select om tijd te besparen en tmp naar schijf te schrijven

  4. SQLite Intersect