Bonjour,
Pour faire un top, je cherche à créer une colonne virtuelle qui s'incrémente automatiquement est ce possible ? peut etre que ce n'est pas la meilleur solution, mais je n'en vois pas d'autre pour ressortir la position du classement.
Merci.
Bonjour,
Pour faire un top, je cherche à créer une colonne virtuelle qui s'incrémente automatiquement est ce possible ? peut etre que ce n'est pas la meilleur solution, mais je n'en vois pas d'autre pour ressortir la position du classement.
Merci.
Oui, avec AUTO_INCREMENT sur la colone et à condition qu'il n'y en ait pas une autre.
Sinon il faut que tu aies recours au triggers ou aux routines.
Je ne trouve pas la synthaxe exacte, pouvez vous me donner un coup de main ?
J'ai testé avec une requete du genre mais ça ne fonctionne pas :
SELECT Auto_increment AS numero FROM `table_fiche`
merci.
Exactement, disons que je calcul une note avec AVG pour un artiste (je tiens un petit site de critique cinéma) en fonction des critiques qu'il a reçu et des films dans lequel il joue, le tout avec une requete.
J'ai déjà la requete fonctionnelle qui me sort virtuellement dans l'ordre des notes :
-nom
-note
je voudrais pouvoir rajouter une autre colonne à partir de rien et virtuellement qui indiquerait la position, il suffirait juste d'un équivalent $i++.
Mais la position par rapport à quoi ?? Dans le classement ? Dans une liste à afficher ?
Une position par rapport à l'ordre des champs dans le résultat de requète, le premier champ retournant 1, le suivant le 2, etc...
mon resultat de requete actuelle est par exemple :
henry | 15
marc | 14.9
toto | 14.5
aprés amélioration de la requete j'ai
1 | henry | 15
2 | marc | 14.9
3 | toto | 14.5
de façon à ce que quand je fait un WHERE nom=toto ça me sorte le 3.
il faut mettre un index primaire à ta table avec un auto_increment, tu peux faire ca dans phpmyadmin, mais bon c'est la base du SQL ça...
Je sais évidemment mettre une clef primaire et un auto increment.
En fait les données que j'affichais à titre d'exemple sont le résultat d'une requete assez complexe, mais elles n'existent pas en tant que tel dans une table.
La note est calculée et créee en tant que colone de résultat avec un AVG() as MOYENNE.
Utilise un compteur en PHP, je n'arrive toujours pas à comprendre où ça coince...position par rapport à l'ordre des champs dans le résultat de requète
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $compteur = 1; while ($row = mysql_fetch_assoc($results)) { // affiche ton champ $compteur++; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SET @rank=0; SELECT @rank:=@rank+1 as rank, autres_champs etc.
Merci beaucoup Sabotage, cela m'avance grandement sur le sujet
Par contre pour execution dans un script php le SET fonctionne t-il ? ou doit-on l'initialiser dans la requete, du coup comment faire ?
tu dois le faire en 2 requêtes, (ou requête multiple avec mysqli)
Cela fonctionne, j'ai bien une requête qui me retourne une colonne avec le rank en première colonne et le nom de l'artiste, note...
il reste cependant un soucis : quand j'effectue une condition restrictive "Where idartiste=4" la colonne du rank est évidemment à 1 vu qu'il n'y a qu'un seul résultat.
Du coup je dois faire un while en php sur la requête sans aucune condition jusqu'à trouver l'id. Ce n'est pas très optimisé comme méthode vu qu'il y a 9000 champs à balayer à chaque fois...
Vous avez une idée pour que le champs rank soit le même après condition ?
(Sinon, la meilleure solution est peut être de créer une tache cron avec une nouvelle table qui reprend le top...).
Partager