Supposons que j'ai une requête SQL comme ceci:
SELECT id, name, index(not a real column) FROM users ORDER BY rating DESC
Je souhaite ajouter des colonnes aux colonnes sélectionnées qui représenteront l'index de l'enregistrement.
Exemple:
id name rating
1 a 4
2 b 2
3 c 8
4 d 5
Pour cette table je veux obtenir:
id name rating index
3 c 8 1
4 d 5 2
1 a 4 3
2 b 2 4
Essayez ce qui suit pour obtenir le row_index:
set @row_num = 0;
SELECT id,name,rating, @row_num := @row_num + 1 as row_index FROM users
ORDER BY rating desc;
Quelque chose comme set @cnt=0; select *, @cnt:=@cnt+1 from users order by rating desc;
Devrait faire le travail (vous aurez cependant besoin de définir @cnt avant chaque requête)
La réponse de @ bonCodigo est correcte lorsque vous essayez en php admin ou en code sql . Mais si vous souhaitez appeler une requête en php, vous devez la déclarer comme suit:
$sql_query = "SELECT (@row_number:=@row_number + 1) AS 'row_index', id, name, rating FROM (SELECT @row_number:=0) AS temp, users"
$this->db->query ( $sql_query )->result ();
(Ce morceau de code est pour le cadre du code allumeur)
MIS À JOUR:
Cependant, cela ne fonctionnera pas si vous utilisez JOIN
ensemble. Dans ce cas, vous devez lire les données comme d'habitude puis ajouter un index de colonne par vous-même, vous pouvez prendre une idée de ce code:
$list = $this->db->query ( $sql_query )->result ();
for($i = 0; $i < count($list); $i++ ){
$list[$i]->no = $i + 1;
}
(Ce morceau de code est pour le cadre du code allumeur)