Mysql
 sql >> Base de données >  >> RDS >> Mysql

Classement des lignes dans une vue MySQL

Utiliser :

SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

Ce n'est pas une manière idéale de le faire, car la requête pour la valeur numérique s'exécutera pour chaque ligne renvoyée. Une meilleure idée serait de créer un NUMBERS table, avec une seule colonne contenant un nombre commençant à un qui s'incrémente jusqu'à un nombre outrageusement grand, puis rejoignez et référencez les NUMBERS tableau d'une manière similaire à l'exemple de variable qui suit.

Classement MySQL, ou son absence

Vous pouvez définir une variable afin d'obtenir la fonctionnalité de pseudo-numéro de ligne, car MySQL n'a aucune fonction de classement :

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • Le SELECT @rownum := 0 définit la variable et la met à zéro.
  • Le r est un alias de sous-requête/table, car vous obtiendrez une erreur dans MySQL si vous ne définissez pas d'alias pour une sous-requête, même si vous ne l'utilisez pas.

Impossible d'utiliser une variable dans une vue MySQL

Si vous le faites, vous obtiendrez l'erreur 1351, car vous ne pouvez pas utiliser une variable dans une vue pour des raisons de conception . Le comportement bogue/fonctionnalité est documenté ici .