J'ai une table: student_marks
marks
-----
44
55
64
98
76
Production attendue:
serial_number|marks
--------------------
1 | 44
2 | 55
3 | 64
4 | 98
5 | 76
En utilisant les variables mysql définies par l'utilisateur, vous pouvez utiliser la requête suivante:
set @a:=0;select @a:=@a+1 serial_number, marks from student_marks;
Existe-t-il un moyen d'y parvenir dans msyql sans utiliser de variables définies par l'utilisateur?
En fonction des raisons pour lesquelles vous ne souhaitez pas utiliser les variables définies par l'utilisateur comme souhaitant éviter d'avoir deux requêtes, une pour l'initialisation et l'autre pour l'utiliser, vous pouvez utiliser les éléments suivants:
SELECT @a:=@a+1 serial_number,
marks
FROM student_marks,
(SELECT @a:= 0) AS a;
La meilleure réponse à cette question devrait être la suivante, la meilleure pratique
SET @count:=0;
SELECT (@count:=@count+1) AS serial_number,
marks
FROM student_marks
J'ai eu une table avec une colonne (c5) a contenir un nombre x, j'ai besoin d'une expression SQL qui répète la même ligne x nombre de fois:
mon tableau A contient:
c1 c2 c3 c4 c5
16 1 2 16 3
16 1 2 17 2
16 1 2 18 1
et j'ai besoin:
c1 c2 c3 c4 c5 n
16 1 2 16 3 1
16 1 2 16 3 2
16 1 2 16 3 3
16 1 2 17 2 1
16 1 2 17 2 2
16 1 2 18 1 1
J'ai résolu ça avec l'expression:
SELECT
c1, c2, c3, c4, c5, row_number AS n
FROM
(
SELECT
@curRow := @curRow + 1 AS row_number
FROM
tablea
JOIN (SELECT @curRow := 0) r
WHERE
@curRow < (
SELECT
max(field1)
FROM
tablea
)
) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;
Non, il n'y en a pas. Mais vous pouvez produire le numéro de série du côté programme, pas celui de la base de données.
Pourquoi n'en faites-vous pas un champ auto-incrémenté?
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html