Technisch gesehen möchten Sie so etwas, um eine Rangfolge oder eine Zeilennummer zu simulieren.
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
Sie können diesen SQL-Code nicht verwenden. Sie erhalten den folgenden Fehler, wenn Sie versuchen, eine Ansicht mit einer Benutzervariablen zu erstellen.
Error Code: 1351
View's SELECT contains a variable or parameter
Der folgende SQL-Code ermöglicht es auch, die row_number zu generieren. Dies setzt voraus, dass Sie eine ID-Spalte haben, die mit AUTO_INCREMENT generiert wird. Aber die Unterabfrage ist eine korrelierte Unterabfrage, was die Ausführung bei größeren Tabellen sehr langsam macht, da die Zählung ausgeführt werden muss auf jeder Platte.
CREATE VIEW table_view
AS
SELECT
*
, (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
FROM
table outer
Nur MySQL 8.0+.
MySQL unterstützt Fensterfunktionen, sodass keine Benutzervariablen von MySQL benötigt werden, um eine Rangfolge oder eine Zeilennummer zu simulieren.
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