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

myślnik w kolejności MySQL według klauzuli

Odpowiedź jest w pytaniu:

Tutaj słowem kluczowym jest "wyrażenie" . Możesz używać wyrażeń w ORDER BY klauzula.

ORDER BY -order_line_groups.sequence DESC

jest wyrażeniem arytmetycznym, a „łącznik” nie jest łącznikiem, ale minusem; jednoargumentowy minus operator matematyczny.

Jak to działa?

Jeśli chodzi o wynik, działa zgodnie z oczekiwaniami:

  • Jeśli typ kolumny order_line_groups.sequence to typ liczbowy lub typ daty i godziny (są one również wewnętrznie przechowywane jako liczby), a następnie minus odwraca kolejność zwracanych wierszy. Klauzula jest równoważna z

      ORDER BY order_line_groups.sequence ASC
    
  • Jeśli typ kolumny to typ ciągu następnie MySQL próbuje konwertować wartości kolumny na liczby (ponieważ odejmowanie jest operacją arytmetyczną i nie jest zdefiniowane dla łańcuchów). Kiedy MySQL konwertuje ciągi znaków na liczby, zatrzymuje się na pierwszym znaku, który nie jest cyfrą. W zależności od danych, które przechowujesz w kolumnie order_line_groups.sequence , mniej lub więcej jego wartości ciągu zostanie przekonwertowane na liczbę 0 .

Odnośnie szybkości, jak wyjaśniono na stronie dokumentacji podanej w pytaniu MySQL nie może używać indeksów do rozwiązania ORDER BY . To spowalnia zapytanie.

Wniosek

Korzystanie z ORDER BY -order_line_groups.sequence spowalnia zapytanie. Co więcej, nie zapewnia dobrego sposobu sortowania zestawu wyników, gdy typ kolumny sequence jest typem ciągu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak uzyskać sumę kolumny z zapytaniem do kodeignitera

  2. Nie można połączyć się z serwerem MySQL, błąd 111

  3. Porównanie MYSQL przy problemie z połączeniem

  4. Pokaż datę 30-04-2020 zamiast 2020-04-30 z bazy mysql za pomocą javascript

  5. BŁĄD 1115 (42000):Nieznany zestaw znaków:„utf8mb4”