> Tous les forums > Forum des Webmasters
 2 champs liés à une tableSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Kyna
  Posté le 29/01/2011 @ 18:03 
Aller en bas de la page 
Petite astucienne

Bonjour à tous!

j'ai des complications avec une requête... j'aimerais avoir un coup de main sur ceci
j'ai deux tables "equipe" et "calendrier_complet"

equipes
id_equipe | nom_equipe
----------------------
1 | drummondville
2 | st-lambert
3 | longueuil
4 | st-constant
5 | st-hubert
6 | laval

calendrier_complet
date | visiteur | receveur | no_partie
----------------------------------------------------
1 jan | 1 | 6 | p1
2 jan | 2 | 5 | p2
3 jan | 3 | 1 | p3
4 jan | 4 | 5 | p4
5 jan | 2 | 6 | p5
6 jan | 1 | 4 | p6

J'aimerais avoir les dates et les noms des équipes qui contient l'équipe d'ont l'id = 1

J'ai commencé de cette façon, mais ça ne va pas du tout...

// Requête pour afficher le calendrier de la ligue
$sql = "SELECT * FROM calendrier_complet, equipes
WHERE calendrier_complet.visiteur = equipes.id_equipe
AND calendrier_complet.receveur = equipes.id_equipe
AND calendrier_complet.visiteur = '".$equipe."'
OR calendrier_complet.receveur = '".$equipe."'
ORDER BY date ASC, no_partie ASC";

est-ce que quelqu'un a une idée?



Modifié par Kyna le 30/01/2011 02:53
Publicité
Cedders
 Posté le 30/01/2011 à 23:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir,

Il me semble qu'il y a deux problèmes, à tester car je suis pas un pro du SQL dans ce genre de situation ^^ :

Ton test de jointure devrait être avec un OR. Ainsi, il me semble que seul si l'id de l'équipe visiteur et receveur sont égales tu auras un résultat

WHERE calendrier_complet.visiteur = equipes.id_equipe
AND calendrier_complet.receveur = equipes.id_equipe

Ensuite, tu devrais isolé tes conditions de jointure des conditions de recherche.

Essaye donc un truc comme ça :

// Requête pour afficher le calendrier de la ligue
$sql = "SELECT * FROM calendrier_complet, equipes
WHERE (calendrier_complet.visiteur = equipes.id_equipe OR calendrier_complet.receveur = equipes.id_equipe)
AND (calendrier_complet.visiteur = '".$equipe."' OR calendrier_complet.receveur = '".$equipe."')
ORDER BY date ASC, no_partie ASC";

J'espère n'avoir pas dit de bêtise, dans tel cas, une autre âme charitable nous corrigeras :D

Kyna
 Posté le 01/02/2011 à 01:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Merci Cedder de m'aider, j'ai pris note de tes conseils, mais malheureusement cela ne fonctionne pas. J'ai de la difficulté à comprendre ce que cela me retourne, mais je sais que les équipes ne sont pas bien identifiées :(

C'est la première fois que je me retrouve face à cette situation, peut être qu'il va falloir que je me tourne vers la fonction « group by »

Cedders
 Posté le 02/02/2011 à 23:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

tu arrives à faire un export de tes 2 tables en SQL et mettre le code ici ?

Comme ça je peux directement tester sur mon pc avant de te balancer des pseudo solutions :D



Modifié par Cedders le 02/02/2011 23:18
Kyna
 Posté le 03/02/2011 à 01:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Rebonjour voici les deux tables http://www.cijoint.fr/cjlink.php?file=cj201102/cij1uo4BqU.zip

j'ai pas tout importé, mais je crois que c'est suffisant pour faire les tests.

merci encore pour ton aide

Kyna
 Posté le 03/02/2011 à 03:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

J'ai trouvé

Avec l'aide de ce site http://www.transio.com/content/sql-multiple-joins-single-table-relationship

voici ma requête

SELECT * FROM (
SELECT c.*,
e1.nom_equipe AS nomVisiteur,
e2.nom_equipe AS nomReceveur
FROM calendrier_complet AS c
INNER JOIN equipes AS e1 ON c.visiteur = e1.id_equipe
INNER JOIN equipes AS e2 ON c.receveur = e2.id_equipe
) AS calendrier
WHERE calendrier.visiteur = 1 OR calendrier.receveur = 1
ORDER BY calendrier.date ASC, calendrier.no_partie ASC

Merci de m'avoir encouragé!

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
16,99 €Lecteur/graveur de CD/DVD externe USB à 16,99 €
Valable jusqu'au 31 Juillet

Amazon fait une promotion sur le lecteur/graveur de CD/DVD externe USB Rodzon qui passe à 16,99 € au lieu de 22,99 €. Ce graveur vous permettre de lire et graver les CD et DVD sur votre ordinateur qui ne dispose pas de lecteur optique (soit la plupart des portables du marché). Branchez-le simplement sur un port USB de votre PC portable ou de votre MacBook pour en profiter. 


> Voir l'offre
28,30 €Micro clé USB 3.1 Sandisk Ultra Fit 256 Go à 28,30 €
Valable jusqu'au 01 Août

Amazon fait une promotion sur la micro clé USB Sandisk Ultra Fit d'une capacité de 256 Go qui passe à 28,30 € livrée gratuitement. La minuscule taille de cette clé USB va vous permettre de la laisser brancher en permanence sur votre portable, votre TV ou votre autoradio sans qu'elle dépasse de manière disgracieuse. Sa compatibilité USB 3.1 lui permet d'atteindre des débits jusqu'à 130 Mo/s. 


> Voir l'offre
114,94 €Carte mère MSI B550 Gaming Plus à 114,94 € livrée
Valable jusqu'au 01 Août

Amazon Allemagne fait une promotion sur la carte mère MSI B550 Gaming Plus à 107,62 €. Comptez 7,32 € pour la livraison en France soit un total de 114,94 € livrée. On la trouve ailleurs à partir de 130 €. Embarquant le chipset AMD B550, la carte mère MSI MPG B550 GAMING PLUS avec son socket AM4 est conçue pour accueillir les processeurs AMD Ryzen de 3ème génération. Elle permettra de composer une configuration Gaming disposant des dernières avancées technologiques : PCI-Express 4.0 pour les cartes graphiques et les SSD M.2, gestion de 128 Go de RAM DDR4. Tout est là pour une expérience gaming enivrante, à vous de jouer !


> Voir l'offre

Sujets relatifs
Suppression champs table selon critère
affichage table par odre alphabétique
tester un champs mysql
Considérer un champs vide mysql non null
Optimiser requête lourde (Copying to tmp table ?)
Différence ...< div > VS < table >
Urgent : optimisation de table
Vérifier les champs des formulaires
déplacement de données d'une table à une autre
masquer une colonne d'une table
Plus de sujets relatifs à 2 champs liés à une table
 > Tous les forums > Forum Forum des Webmasters