pb avec une grosse requête...

pb avec une grosse requête... - SQL/NoSQL - Programmation

Marsh Posté le 29-06-2004 à 13:18:03    

alors voilà le pb :  
 
j'ai une table qui contient des matchs (matchid, equipe1, equipe2)
une table qui contient des pronostiques (pronoid, matchid, login, score)
 
je voudrais avoir un gros tableau un peu comme ça :

Code :
  1. |  olivier  | pierre |  marie  |
  2. ________|___________|________|_________|
  3. match 1 |    1-0    |    -   |    2-1  |
  4. match 2 |    2-1    |  1-0   |     -   |
  5. match 3 |    1-3    |   0-1  |     -   |


je voudrais faire le truc en une requête.... toute la subtilité (enfun une grosse partie) vient du fait que tout le monde n'a pas pronostiqué à chaque match forcément... (et que donc dans mon parsing des résultats, je dois faire attention de ne pas zapper la cellule...)
j'ai essayé avec des join mais j'arrive pas au résultat escompté: dans quel sens faire le join ?? :)
je précise aussi que j'ai une table des personne si nécessaire...
merci d'avance


Message édité par titione le 29-06-2004 à 14:29:35
Reply

Marsh Posté le 29-06-2004 à 13:18:03   

Reply

Marsh Posté le 29-06-2004 à 13:24:37    

Le probleme ne va pas etre la requete mais plutôt la facon de l'afficher . De toute facon, il faudra faire une requete pour récupérer la liste des pronostiqueurs
 

Code :
  1. select m.matchid,m.equipe1,m.equipe2,p.pronoid,p.score,p.login from matchs m, prono p
  2. where m.matchid=p.matchid
  3. order by m.matchid,p.login


 
De plus si tu as une table personne, je suppose que celle-ci a un id, pourquoi ne pas l'avoir mis dans la table prono ??
 
Ensuite, je vois l'algo comme ca
Une première requete pour alimenter un tableau tab[idlogin]=login
Ensuite la deuxième requete, les lignes sont ordonnées de facon à afficher les matchs dans l'ordre et les pronostiqueurs dans l'ordre. Tu verifies que la personne à parier sinon tu mets une case vide
et voilà


Message édité par Lord II le 29-06-2004 à 13:27:56

---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 29-06-2004 à 14:10:44    

le but était de tout faire en une requête... (mis à part la première ligne of course...)
pour la table personne, l'id c le login c pareil...

Reply

Marsh Posté le 29-06-2004 à 14:44:52    

+1 pour la requête de Lord ii :)
 
ensuite, tu fetches ligne par ligne par exemple, et tu formes un tableau à 2 dimensions :
- première dimension: le match,
- deuxième dimension: la personne.
En même temps, tu qtoques dans un tableau à une dimension le nom des personnes distinctes ayant fait au moins un prognostic.
 
Après, il est facile de faire une boucle sur le tableau à 2 dimensions, sur la première dimension, et d'appeler une fonction qui affiche la ligne du match en question.
Cette fonction prendra en argument le sous-tableau des prognostics (pour le match courant) et le tableau des personnes ayant fait au moins un prognostic, et affichera pour chaque personne le prognostic fait ou '-' :)

Reply

Marsh Posté le 29-06-2004 à 15:06:15    

j'ai du mal à voir comment je peux synchroniser les noms des personnes qui ont pronostiqué avec les noms pour chaque match...
c ptet la transformation en tableau que je vois pas exactement en fait :(

Reply

Marsh Posté le 29-06-2004 à 15:21:42    

Il te suffit des les ordonner suivant le meme paramètre ( en l'occurence login )
Ensuite, il te suffit de voir si au moment de l'affichage des pronostiques, il ne manque pas un pronostiqueur.


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 06-07-2004 à 23:34:39    

Code :
  1. select m.matchid,m.equipe1,m.equipe2,p.pronoid,p.score,p.login from matchs m, prono p
  2.   where m.matchid=p.matchid
  3.   order by m.matchid,p.login


 
si aucun pronostic n'a été fait pour un match, il n'apparaîtra pas dans la liste
 
en fait ce serait plutôt dans ce style :
 

Code :
  1. select m.matchid, m.equipe1, m.equipe2, p.login, p.score from match m
  2.   left join prono p on p.pronoid = m.matchid
  3.     order by m.matchid, p.login


 
ensuite l'algo ca donnerait ca :
 

Code :
  1. array login[]
  2.   nb_login = 0
  3.   function test_login(a):
  4.    test_login = 0
  5.    for i = 0 to nb_login:
  6.     if (login[i] = a) then:
  7.        test_login = i
  8.      exit
  9.   pos_login = 0
  10.   while not rs.eof:
  11.    new_match_id = rs(0)
  12.    if (new_match_id <> old_match_id) then:
  13.       pos_login = 0
  14.    if (test_login(rs(3)) = 0) then: -> la recherche du login dans le tableau est nulle
  15.                                      donc il faut le rajouter
  16.     login[nb_login+1] = rs(3)
  17.     nb_login++
  18.    if (pos_login) then:  -> on passe à une nouvelle ligne donc on affiche le libellé du
  19.                           match avec les équipes
  20.    if (!issnull(p_login)) then: -> il y a au moins un pronostic
  21.     pos_visuel_login = test_login(rs(3)) -> ici on connait la position visuelle du login
  22.                                           donc on peut décaler l'affichage de
  23.                                           pos_visuel_login - pos_login
  24.    old_match_id = rs(0)
  25.    pos_login++
  26.    rs.movenext


Message édité par bill_clinton le 07-07-2004 à 19:41:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed