Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2055 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête résultat aléatoire

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête résultat aléatoire

n°2013823
M Orthogra​phe
Posté le 03-08-2010 à 09:59:13  profilanswer
 

Bonjour,
Je suis en train de réaliser une web-logiciel de gestion de tournois or j'ai un petit soucis avec une requête.
 
Voici un extrait de la table RESULTAT

Code :
  1. id idTournois idAnnee j1 j2   num
  2. 1 1          1          1 2     6401
  3. 2 1          1          8 4     6402


 
Voici un extrait de la table JOUEUR
 

Code :
  1. id prenomJ nomJ
  2. 1           Roger          Federer
  3. 2           Peter       Luczak
  4. 4           Alejandro     Falla
  5. 8           Janko     Tipsarevic


 
Je souhaiterais afficher le nom de joueurs dans l'ordre suivant
FEDERER
LUCZAK
TIPSAREVIC
FALLA
 
c'est à dire parcourir le champ J1 puis le champ J2 dans l'ordre croissant du champ num
 
Voici ma requête... qui ne fonctionne pas. En réalité elle fonctionne "un peu" mais dès que le nombre d'enregistrements est élevé, l'ordre d'affichage est aléatoire et change selon les rafraichissements ..
 

Code :
  1. SELECT J.nomJ FROM joueur as J, resultat as R
  2.  WHERE (J.id = R.j1
  3.  OR J.id = R.j2)
  4.  ORDER BY R.id, R.j1 ASC


 
Merci

mood
Publicité
Posté le 03-08-2010 à 09:59:13  profilanswer
 

n°2013886
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 11:14:38  profilanswer
 

Essayes avec cette requête :
SELECT J1.NomJ FROM joueur J1 inner join resultat R1 ON J1.id = R1.j1
UNION SELECT J2.NomJ FROM joueur J2 inner join resultat R1 ON J2.id = R2.j2
ORDER BY R.id, J1.id, J2.if


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2013922
M Orthogra​phe
Posté le 03-08-2010 à 12:42:01  profilanswer
 

SELECT J1.NomJ  
FROM joueur J1 inner join resultat R1  
ON J1.id = R1.j1  
UNION  
SELECT J2.NomJ  
FROM joueur J2 inner join resultat R1  
ON J2.id = R1.j2
 
Marche parfaitement rufo merci
Peux-tu m'expliquer le inner join on ?

n°2013924
M Orthogra​phe
Posté le 03-08-2010 à 12:46:46  profilanswer
 

Ah ben non en fait ça marche pas ...
J'avais viré le order car il me disait  
"#1054 - Unknown column 'R.id' in 'order clause'"
(j'ai par contre modifié J2.if en J2.id)

n°2013940
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 14:03:12  profilanswer
 

Pardon, R1 pas R dans le order by :
SELECT J1.NomJ FROM joueur J1 inner join resultat R1 ON J1.id = R1.j1
UNION SELECT J2.NomJ FROM joueur J2 inner join resultat R1 ON J2.id = R2.j2
ORDER BY R1.id, J1.id, J2.id
http://dev.mysql.com/doc/refman/5.0/fr/union.html


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2013965
M Orthogra​phe
Posté le 03-08-2010 à 15:21:42  profilanswer
 

erreur une petite erreur :  
#1054 - Unknown column 'R2.j2' in 'on clause'
et si je remplace R2.j2 par R1.j2  
j'obtiens
#1054 - Unknown column 'R1.id' in 'order clause'

n°2013972
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 15:37:46  profilanswer
 

au fait, inner join, ça la méthode normale pour faire des équi-jointures. Mais souvent les profs nous font faire les équi-jointures dans le where :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2013985
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2010 à 16:10:14  profilanswer
 

Bon, j'ai une solution :

Code :
  1. SELECT nomJ, ((r.id * 1000) + (j.id * 100)) AS Rank FROM Joueur j INNER JOIN Resultat r ON (j.id = r.j1)
  2. UNION
  3. SELECT nomJ, ((r.id * 1000) + (j.id * 300)) AS Rank FROM Joueur j INNER JOIN Resultat r ON (j.id = r.j2)
  4. ORDER BY Rank


Après, suivant la taille de ta BD, faudra sans doute adapter les nombres 1000, 100 et 300. Si t'as plus de 100 joueurs, faudra mettre 1000 à la place de 100 et 3000 à la place de 300, 10000 à la place de 1000.
 
Mais y'a peut-être mieux ou plus simple...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2014043
M Orthogra​phe
Posté le 03-08-2010 à 22:51:12  profilanswer
 

Héhé j'ai trouvé a peu de choses près la même requête que toi ! Ca me plaisait bien mais bon c'est vraiment crade je trouve et je suis persuadé qu'il y a une autre solution mais merci beaucoup, cela fonctionne

n°2014064
lasnoufle
La seule et unique!
Posté le 04-08-2010 à 01:12:05  profilanswer
 

Hu hu hu, bon je précise que c'était juste pour essayer, je dis pas que ca va tout casser niveau performance!

SELECT j.nomJ
FROM joueur j
CROSS JOIN (SELECT 1 AS n FROM dual UNION ALL SELECT 2 FROM dual) cj
INNER JOIN resultat r ON (j.id = CASE WHEN cj.n=1 THEN r.j1 ELSE r.j2 END)
ORDER BY r.id, cj.n;


Le CASE/WHEN/THEN/ELSE/END marche sous Oracle, je sais pas si c'est dans la norme SQL donc pas garanti pour d'autres SGBD m'enfin s'il n'y a pas exactement ca, il y aura un truc équivalent...


Message édité par lasnoufle le 04-08-2010 à 01:13:09

---------------
C'était vraiment très intéressant.
mood
Publicité
Posté le 04-08-2010 à 01:12:05  profilanswer
 

n°2014085
rufo
Pas me confondre avec Lycos!
Posté le 04-08-2010 à 09:34:05  profilanswer
 

Le CASE existes aussi sous mysql.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête résultat aléatoire

 

Sujets relatifs
requete BO webi duréeProblème en PHP pour une requête SQL
ACCESS: ComboBox pour filtrer resultat requeteProblème avec une requête mysql en PHP
[Oracle]Mise à jour de clé étrangère aléatoirePB affichage requete dans PHP
requète sql [RESOLUT][Access 2007] Cocher cases pour une requête
Remplacer un résultat par un autreAffichage aléatoire d'un des enregistrements du résultat d'une requète
Plus de sujets relatifs à : Requête résultat aléatoire


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR