web-dev-qa-db-fra.com

Comment ajouter ROW INDEX en tant que colonne à une requête SQL SELECT?

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
14
Yarin Gold

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;
18
bonCodigo

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)

1
nvlass

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)

0
Nguyen Tan Dat