Forums Développement Multimédia

Aller au contenu

Pb avec requète simple

CODE PHP MySQL

5 réponses à ce sujet

#1 jean.ceugniet

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 391 messages

Posté 24 August 2007 - 23:06 PM

Salut,

C'est surement tout bête comme jointure, mais je n'arrive pas à la trouver :
J'ai 3 tables : joueurs, parties et scores
La table joueurs

* joueur_id : l'id
* joueur_nom

La table parties

* partie_id : l'id
* partie_numero : un nombre désignant la partie de façon plus conviviale (le nom de la partie en quelque sorte)

La table scores

* score_id : l'id
* partie_id : l'id de la partie dans laquelle ce score a été obtenu
* joueur_id : l'id du joueur qui a obtenu ce score
* score : le score en question


Ces tables contiennent des données correspondant à un tournoi dans lequel :

* de nouveaux joueurs peuvent s'inscrire avant toute partie
* un joueur ne participe pas forcément à toutes les parties
* une partie ne contient donc pas nécessairement TOUS les joueurs connus


Je veux simplement récupérer, pour un joueur donné,

* en donnée 1 : la liste de TOUTES les parties (qu'il y ait participé ou pas)
* en donnée 2 : son score à la partie en question, ou NULL s'il n'y était pas


Voilà, la requète est probablement toute bête, mais là je pédale dans la semoule.

Merci smile.gif


#2 shgamer

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3336 messages

Posté 25 August 2007 - 07:18 AM

Salut,

Autant le sujet est tres bien décrit et on pourrait facilement t'aider, autant pour ma part j'aimerais bien voir des essais pour ne pas avoir l'impression de faire le travail à ta place smile.gif

Merci d'avance.

#3 jean.ceugniet

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 391 messages

Posté 25 August 2007 - 10:30 AM

No pb. J'ai notamment essayé ça :
CODE
SELECT score
FROM parties pa INNER JOIN joueurs_scores js ON pa.partie_id = js.partie_id
LEFT OUTER JOIN joueurs jo ON js.joueur_id = jo.joueur_id
WHERE jo.joueur_id = $joueurId
ORDER BY partie_numero


ainsi que la même avec des CROSS JOIN partout (si j'ai bien compris, c'est comme un FULL OUTER JOIN), mais ça ne me ressort que les enregistrements existants dans la table score.

#4 pbmaske

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3032 messages

Posté 31 August 2007 - 08:07 AM

Bonjour smile.gif
CITATION
mais ça ne me ressort que les enregistrements existants dans la table score.


"SELECT score"
Ben du coup c'est assez logique nan? Faudrait que tu selectionnes joueur_nom et partie_numero aussi wink.gif

C'est ce que je vois déjà...

#5 jean.ceugniet

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 391 messages

Posté 31 August 2007 - 23:17 PM

Salut,

Bon très honnètement, ça m'a pris la tête de tester toutes les formes de join de la galaxie sans plus vraiment comprendre où j'allais; j'ai donc contourné le problème en utilisant des tableaux php pré-remplis de valeurs "pas de score", puis bouché les trous avec les valeurs connues. Bon, ce n'est pas très élégant, mais vu le nombre d'enregistrements, ce n'est pas un problème.

Ceci dit, je vais chercher pour comprendre où je me suis planté dans la logique de ma requète, et dès que j'ai trouvé, je re-poste.

Merci smile.gif

#6 maestro1303

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 15 September 2007 - 13:43 PM

Bonjour à tous,

Je suis plutôt un débutant dans sql server et aussi de sql. Seulement je crois pouvoir bien vous présenter mon problème:

J'ai quatre tables ayant la même structure

code_prduit | prix| date_validite| Nom_produit

Chaque table correspond à l'offre d'un pays donné. pour chaque produit le code ne varie jamais d'un pays à un autre donc d'une table à une autre le code est unique!!

exemple illustratif:

table T1
|0112|0.235|20070931|abcsekj|
|0102|0.225|20070931|abkdekj|
|0101|0.035|20070931|abrdekj|
|0100|0.135|20070831|amcdekj|
|0151|0.235|20070731|ajcdekj|
|0161|0.244|20070731|aucdekj|
|0331|0.435|20071031|mbcdekj|
|4111|0.535|20071231|lbcdekj|
|1111|0.635|20071031|ibcdekj|
|8112|0.235|20071131|ubcuekj|
|0112|0.135|20070931|ybcoekj|
|0882|0.225|20070931|fbcdekj|


table T2
|0112|0.335|20070931|odjodho|
|1111|0.035|20070931|abmdek|
|2222|0.935|20070931|abkdekt|
|0151|0.435|20070931|abrdekr|
|8112|0.135|20071131|abfuekg|
|0331|0.435|20071031|abddek|
|3331|0.535|20071031|abgdek|
|0882|0.125|20070931|fbcdekj|
|0992|0.035|20070931|xbcdekj|
|0882|0.025|20070931|fbcdekj|


table T3
|0992|0.235|20070931|xbcdekj|
|0882|0.225|20070931|fbcdekj|
|0771|0.035|20070931|ybcdekj|
|0100|0.135|20070831|gbcdekj|
|0112|0.335|20070931|odjodho|
|1111|0.135|20070931|abmdek|
|2222|0.035|20070931|abkdekt|
|0151|0.135|20070931|abrdekr|

table T4
|0100|0.135|20071031|abhdek|
|0112|0.535|20071031|abddek|
|0992|0.535|20071031|absdgk|
|8112|0.035|20071031|abHddk|
|0151|0.235|20070931|abrdekr|
|8112|0.095|20071131|abfuekg|
|0331|0.835|20071031|abddek|
|0992|0.265|20070931|xbcdekj|
|0882|0.245|20070931|fbcdekj|


Ne faites pas attention au champ nom_produit: effectivement pour un même code_produit, le nom doit être identique, ce qui n'est pas le cas dans l'exemple que j'ai donné à la va vite

Je voudrais avoir une table R regroupant les tous ces résultats de la façon suivante:

pour chaque code présent dans une quelconque des 4 tables je voudrais avoir

code_prduit | prix T1| prix T2| prix T3| prix T4|Nom_produit

Si le produit ne figure pas dans T4(par exemple) j'attribue une valeur 100 à son "prix T4" ou je laisse vide son "prix T4". Je fais la même chose quand il n'est pas présent dans T2 etc...

En résumé je veux que la table R me récapitule les intersections des 4 Tables, les différences symetriques etc... pour ne perdre aucune information et tout fusionner dans R.

D'abord Y a-t-il une solution à mon problème?

En tout cas je pense que seule une méga-requête SQL peut venir à bout de ce problème si bien sûr il a une solution.

Je ne sais pas faire celà quelqu'un peut il m'aider?

Merci infiniment!

Modifié par maestro1303, 15 September 2007 - 13:45 PM.




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP