Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak alternatywnie sortować wyniki wielu zapytań?

Oto jak możesz to zrobić

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 ;

Pomysł polega na przypisaniu rn wartości dla każdego elementu tabeli i należy się upewnić, że te wartości są zawsze w porządku rosnącym

Więc jeśli uruchomisz zapytanie dla każdej tabeli, którą będziesz mieć

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)

Tutaj możesz zobaczyć table1 rn wartości to 1,2,3,.... table2 wartości to 1.5,2.5,3.5,.... table3 wartości to 1.6,2.6,....

więc w końcu, gdy zamówisz wynik ze wszystkimi rn, będzie on taki, jak

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie o zakres czasu między datami przy użyciu DATETIME mysql

  2. Mysql zmienia domyślny zestaw znaków tabeli na zestaw znaków bazy danych

  3. Suma wyrażenia konstruktora przypadku w QueryDSL

  4. Pisanie pojedynczego zapytania dla wielu zapytań z tym samym warunkiem, w którym ta sama tabela

  5. usuń gdzie id jest największy