Ordre des id dans le SELECT non pris en compte dans le WHILE

Résolu
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 21 mars 2011 à 17:01
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 1 avril 2011 à 11:32
Bonjour à tous,

j'ai une requête toute simple du genre:

$sql="SELECT pseudo,avatar FROM membres WHERE membre_id IN ('".$Ris[0]."','".$Ris[1]."','".$Ris[2]."')";
$result= mysql_query($sql) or die('');

J'en extrais le résultat comme ceci:

while ($Res = mysql_fetch_row($result) ){

$biz.="

".$Res[0]."
";
}

Mon problème est que les id précisés dans la 1ère requête ne sont pas forcément classés dans un quelconque ordre numérique alors que le while me les rends ordonnée du plus petit au plus grand. Pour obtenir ce que je veux (garder le même ordre d'entrée que dans le SELECT) je suis obligé d'utiliser le système D.

N'existe-t-il pas un moyen de forcer le while à me rendre les données dans le même ordre que celui de la requête SELECT ?

Merci d'avance



Signé Sagat

12 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 16:56
Je t'apporte une légère amélioration de ton code
for($i = 1; $i < 4; $i++) {
$sql = "SELECT ct.ligne_id, ct.membre".$i.", ct.score".$i." 
ms.membre_id, ms.pseudo, ms.avatar 
FROM classement ct 
INNER JOIN membres ms
ON ct.membre".$i." = ms.membre_id 
WHERE ct.ligne_id = 'XXX'";
$query = mysql_query($sql) or die( mysql_error() );
while($row = mysql_fetch_row($query)) '
....
}
}

Je pense qu'elle te conviendra.




______________________________________________________________________
3
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
22 mars 2011 à 16:52
Pour désigner l'ordre d'affichage d'une requête il faut utiliser la clause sql ORDER BY.

______________________________________________________________________
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 mars 2011 à 21:21
$sql = "SELECT pseudo, avatar FROM membres WHERE membre_id IN ('{$Ris[0]}','{$Ris[1]}','{$Ris[2]}') ORDER BY membre_id;"; 


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
31 mars 2011 à 15:38
Désolé, mes aucunes de vos méthodes ne fonctionne.

La débrouille me permet d'obtenir ce que je souhaite.

@phpAnonyme: j'obtiens les valeurs de Ris[] par une requête utilisant la clause ORDER BY sur un champs donné. Cette première requête me renvoie des id de membres qui eux n'ont aucun ordre particulier.

Mon problème est que le while me donne bien les infos correspondantes mais pas forcément dans le bon ordre.


Signé Sagat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 15:48
Le While n'a rien à voir dedans.
Fais voir ta requête avec le ORDER BY


______________________________________________________________________
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 15:53
N'existe-t-il pas un moyen de forcer le while à me rendre les données dans le même ordre que celui de la requête SELECT ?

Petite précision par défaut le SELECT renvoie les données tel qu'il les à trouver.

______________________________________________________________________
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
31 mars 2011 à 16:05
Salut,

j'ai une tâche Cron qui rempli correctement une table donnée.

Pour obtenir mes infos, j'utilise les requêtes suivantes:

$sql="SELECT membre_id1,membre_id2,membre_id3,score1,score2,score3 FROM matable WHERE ligne_id='xxx'";
$result=mysql_query($sql) or die();
$Ris=mysql_fetch_row($result);

$sql1= "SELECT membre_id,pseudo,avatar FROM membres WHERE membre_id IN ('".$Ris[0]."','".$Ris[1]."','".$Ris[2]."')";
$result1= mysql_query($sql1) or die('Echec 1');

Avec score1 > score 2 > score 3

En faisant un tableau (membre_idX,scoreX) j'en déduis l'ordre souhaité

Sinon le Order By était dans la tâche cron.

Signé Sagat
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 16:19
j'ai une tâche Cron qui rempli correctement une table donnée.

Sinon le Order By était dans la tâche cron.

Si la tâche cron sert à insérer des données je ne vois pas pourquoi tu utilise un ORDER BY dedans.
Néanmoins, au cas où tu ne le saurais pas ou que tu n'ai pas fais de recherche dessus si tu ne définit pas l'ordre de sortie(croissant ou décroissant) souhaité dans la clause, par défaut l'ordre est croissant(si je me souviens bien)

SELECT membre_id1,membre_id2,membre_id3,score1,score2,score3 FROM matable WHERE ligne_id='xxx'

J'ai du mal à saisir, la structure de cette table, voir de l'autre également. N'est ce pas un seul membre qui effectue les scores 1, 2 et 3?

Pour aller vite et de manière simple il faut me détailler le fonctionnement de tes tables et ce que tu cherche à faire.
- Que souhaite tu afficher ?
- Dans quel ordre ?
- A quoi correspond les champs : membre_id1,membre_id2,membre_id3 ?
Ton membre à plusieurs ID ?

Voilà.

______________________________________________________________________
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
31 mars 2011 à 16:31
Re,

1 table membres: membre_id, pseudo, avatar
1 table classement: ligne_id (identifiant du jeu), 3 meilleurs membres avec leur score respectifs (membre_id1, membre_id2, membre_id3, score1,..)

Ma tâche cron cherche le membre_id et le score des 3 meilleurs membres pour chaque jeu, et inscrit les résultats dans la table classement. Un simple SELECT sur cette table me permet de connaitre le trio de tête.


J'aurai pû faire une table classement avec plusieurs lignes par jeu, cela m'aurait permis de faire directement un seul Select sur 2 tables et de tout obtenir dans l'ordre. L'idée aurait put être:

ligne_id, top1, membre_id, score
ligne_id, top2, membre_id, score.....

Mais j'ai préféré utiliser 1 seule ligne par jeu. Un simple système D me permet d'obtenir ce que je désire. Donc je postais pour savoir s'il existait une manière de sortir les données d'un SELECT non pas dans l'ordre trouvé mais dans un ordre prédéfini et quelconque à la fois (celui inscrit dans la clause IN)

Merci encore de te soucier de mon problème, et s'il n'y a pas d'autres solutions que de modifier la structure de mes tables, je continuerai d'utiliser la débrouille comme rescousse


Signé Sagat
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 16:45
Non tu ne peut effectivement pas. Pas directement en tout cas, i.e système D comme tu dis.

Le choix que tu as pris n'est effectivement pas la meilleure pour ce que tu veux en faire.

______________________________________________________________________
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
31 mars 2011 à 17:00
ct.membre_id".$i." sur la 2ème et 6eme ligne


______________________________________________________________________
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
1 avril 2011 à 11:32
Je te remercie, c'est effectivement bien plus propre que mon système D et sans toucher la structure de mes tables.

Je regrette même de pas y avoir penser tout seul ^^

Merci encore


Signé Sagat
0
Rejoignez-nous