[RESOLU] Jointures, mon casse-tête !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Jointures, mon casse-tête !

Re: Jointures, mon casse-tête !

par moogli » 23 déc. 2012, 21:43

Salut,

Produit cartésien.
Vire le limite tu verra les autres lignes.
En gros tu multiplie tes lignes par le nombres de celle de l'un des deux autres tables (voir les deux).
Vire les left ils n'ils n'ont pas de raison d'être. (Je suppose qu'un évent n'existe pour un mec et un "id_pari" ?)

Tests ta requête dans un client SQL se sera plus simple.

@+

Re: Jointures, mon casse-tête !

par myarou » 21 déc. 2012, 18:25

Ahah, oui, j'avais peut-être zappé quelques étapes dans l'explication :)

Alors, les tables :
CREATE TABLE IF NOT EXISTS `Liste_Paris` (
  `Id_PARI` int(255) NOT NULL AUTO_INCREMENT,
  `Titre_PARI` varchar(255) NOT NULL,
  `Id_Createur` int(255) NOT NULL,
  `Desc_PARI` varchar(255) DEFAULT NULL,
  `Date_Creation` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `Date_butoir` datetime NOT NULL,
  `Date_Cloture` datetime DEFAULT NULL,
  `Source_PARI` varchar(255) DEFAULT NULL,
  `Statut_PARI` enum('IN PROGRESS','ENDED') NOT NULL DEFAULT 'IN PROGRESS',
  `End_PARI` enum('POUR','CONTRE') DEFAULT NULL,
  PRIMARY KEY (`Id_PARI`)
)
CREATE TABLE IF NOT EXISTS `Mise_Paris` (
  `Id_PARI` int(255) NOT NULL,
  `id_Miseur` int(255) NOT NULL,
  `Date_MISE` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  `Montant_MISE` int(100) NOT NULL,
  `Reason_MISE` varchar(255) NOT NULL,
  PRIMARY KEY (`Id_PARI`,`id_Miseur`)
)
CREATE TABLE IF NOT EXISTS `Tchatcheurs` (
  `id_Tchatcheur` int(255) NOT NULL AUTO_INCREMENT,
  `nom_Tchatcheur` varchar(255) NOT NULL,
  `login_Tchatcheur` varchar(255) NOT NULL,
  `pwd_Tchatcheur` varchar(255) NOT NULL,
  `mojo_Tchatcheur` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_Tchatcheur`)
)
CREATE TABLE IF NOT EXISTS `Events_Paris` (
  `idEvent` int(255) NOT NULL AUTO_INCREMENT,
  `idTchatcheur` int(255) NOT NULL,
  `idPari` int(255) NOT NULL,
  `TypeAction` enum('betorder','createbet','endbet') NOT NULL,
  PRIMARY KEY (`idEvent`)
)

Re: Jointures, mon casse-tête !

par xTG » 21 déc. 2012, 18:03

D'accord le problème est bien plus clair après ce message ! :D

Pourrais-tu nous donner la liste des CREATE table qu'on voit ce qu'il te manque dans la jointure ?
On pourra aussi détecter un problème de conception qui pourrai être la cause de ton échec (c'est peut être tout simplement pas possible avec ta structure actuelle).

Re: Jointures, mon casse-tête !

par myarou » 21 déc. 2012, 16:00

C'est pas un souci d'ordre mon problème, mais un problème de jointure, le contenu de mes lignes de résultat n'est pas ce que j'attends.

Dans ma colonne idTchatcheur, il me met toujours le même id (3) alors qu'il ne devrait apparaît qu'une fois et les autres devraient être 4, 6, 8, ..
Ces lignes correspondent à la liste des gens (tchatcheurs) qui ont misé sur (ou créé ou clôturé) un pari, à quelle date, quelle mise (POUR / CONTRE), ...

Dans le screen que j'ai posté, on voit bien les DATE_MISE qui changent, les REASON_MISE aussi, mais pas les id, d'où mon problème de jointure !

Merci de te pencher dessus en tout cas :)

Re: Jointures, mon casse-tête !

par xTG » 21 déc. 2012, 15:51

Pas clair ton affaire...
Tu veux un classement par idEvent beh tu l'as.

Veux-tu un groupement des idEvent pour ne pas avoir de mise du même idEvent ?

Re: Jointures, mon casse-tête !

par myarou » 21 déc. 2012, 15:34

non non, idEvent, comme dans ma requête initial, et toujours en LIMIT 0,5 , pour avoir mes 5 derniers évènements insérés !

Re: Jointures, mon casse-tête !

par xTG » 21 déc. 2012, 15:01

C'est un ordre par quoi que tu veux ? date ?

Re: Jointures, mon casse-tête !

par myarou » 21 déc. 2012, 14:03

En rapport avec la capture postée précédemment, il n'est donc pas logique que la colonne idTchatcheur soit tout le temps à 3 dans le retour de la requête, car les paris ont été réalisées par des idTchatcheurs différents, donc bien problème de jointure mais je n'arrive pas à comprendre où ..

Jointures, mon casse-tête !

par myarou » 21 déc. 2012, 13:58

Hello,

Je me casse la tête sévère sur une requête avec jointures... celle-ci me retourne trop de lignes, car mes jointures sont mal faites mais je ne sais pas comment les corriger.

Ma requête est la suivante, me permettant de récupérer les 5 derniers évènements stockés (qui concernent des évènements de Paris, e.TypeAction) dans la table Events_Paris, en souhaitant aller récupérer les infos concernant ces paris (DATE_MISE, Reason_MISE, Titre_Pari, ...) dans les tables Liste_Paris et Mise_Paris.

Le problème, c'est qu'une fois les jointures faites, voici le résultat :

Image

Tout est mélangé...
Avez-vous une idée de remaniement de la requête ? :)

Voilà ma requête :
SELECT e.idEvent, e.idTchatcheur, e.idPari, e.TypeAction, m.DATE_MISE, m.Reason_MISE, l.Titre_PARI, l.Date_Creation, l.Date_Cloture 
			FROM Events_Paris e
			LEFT JOIN Mise_Paris m
			ON e.idPari = m.id_PARI
			LEFT JOIN Liste_Paris l
			ON e.idPari = l.id_PARI
			ORDER BY idEvent DESC 
			LIMIT 0,5