sql >> Database teknologi >  >> RDS >> Mysql

Hvordan genererer man sekvensnummer i MySQL-visning?

Teknisk vil du have noget som dette for at simulere rangering eller et rækkenummer.

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  

Du kan ikke bruge denne SQL-kode, du vil få fejlen nedenfor, hvis du forsøger at oprette en visning med en brugervariabel.

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

SQL-koden nedenfor gør det også muligt at generere rækkenummeret. Dette forudsætter, at du har en id-kolonne, hvad der genereres med AUTO_INCREMENT. Men underforespørgslen er en korreleret underforespørgsel, hvilket gør udførelsen meget langsom på større tabeller, fordi optællingen skal udføres på hver post.

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

Kun MySQL 8.0+.

MySQL understøtter vinduesfunktioner, så ingen MySQL's brugervariable er nødvendige for at simulere rangering eller et rækkenummer.

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. HVOR vs AT HAVE

  2. hvad er den alternative funktion mysql_list_tables() i php 5

  3. Se alle fremmednøglebegrænsninger for hele MySQL-databasen

  4. PDO/MySQL rowCount vender ikke tilbage som forventet