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

Jak wygenerować numer sekwencyjny w widoku MySQL?

Technicznie rzecz biorąc, potrzebujesz czegoś takiego, aby symulować ranking lub numer wiersza.

CREATE VIEW table_view 
AS
 SELECT
  *
  , (@row_number := @row_number + 1) AS row_number 
 FROM 
  table
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
 ORDER BY
  table.column ASC 
CROSS JOIN (SELECT @row_number := 0) AS init_user_var  

Nie możesz użyć tego kodu SQL, otrzymasz poniższy błąd, jeśli spróbujesz utworzyć widok ze zmienną użytkownika.

Error Code: 1351
View's SELECT contains a variable or parameter

Poniższy kod SQL umożliwia również wygenerowanie numeru wiersza. Zakłada się, że masz kolumnę identyfikatora, która jest generowana za pomocą AUTO_INCREMENT. Ale podzapytanie jest skorelowanym podzapytaniem, co powoduje, że wykonanie jest bardzo powolne w przypadku większych tabel, ponieważ zliczanie musi zostać wykonane na każdym nagraniu.

CREATE VIEW table_view
AS
 SELECT 
  *
  , (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
 FROM 
   table outer

Tylko MySQL 8.0+.

MySQL obsługuje funkcje okien, więc żadne zmienne użytkownika MySQL nie są potrzebne do symulacji rankingu lub numeru wiersza.

CREATE VIEW table_view 
AS
 SELECT
  *
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
  , (ROW_NUMBER() OVER (ORDER BY table.column ASC)) AS row_number
 FROM 
  table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy jest jakaś zaleta/wada przechowywania wartości pola jako tablicy JSON zamiast tworzenia nowej tabeli i obstawiania relacji jeden-do-wielu?

  2. Tabela partycji, każda partycja na innym dysku na moim HDD

  3. Umieszczanie zapytania SQL w funkcji PHP

  4. MySQL:Jak osiągnąć blokowanie transakcji na poziomie wiersza zamiast blokowania tabeli?

  5. Pętla foreach MySQL