> 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
39,99 €Lego Star wars Casque Boba Fett n°75277 à 39,99 € (via coupon)
Valable jusqu'au 27 Juin

Amazon fait une promotion sur le Lego Star wars Casque Boba Fett n°75277 qui passe à 39,99 € grâce à un coupon de réduction à activer sur la page du produit. On le trouve ailleurs autour de 60 €. Ce formidable casque de Boba Fett (75277) à collectionner rend hommage à l’un des chasseurs de primes les plus terribles de l’univers Star Wars. Il met au défi tous les constructeurs LEGO.


> Voir l'offre
95,39 €Kit de 16 Go (2x8Go) de mémoire DDR4 Corsair Vengeance RGB Pro 3200 MHz à 95,39 € livré (via coupon)
Valable jusqu'au 27 Juin

Amazon Allemagne fait une promotion sur le kit de 16 Go (2x8 Go) de mémoire DDR4 Corsair Vengeance RGB Pro 3200 MT/s CL16 à 90,66 € (avec la TVA ajustée). Comptez 4,73 € pour la livraison en France soit un total de 95,39 € livré alors qu'on le trouve ailleurs autour de 119 €. Vous pourrez personnaliser la palette de couleurs directement depuis le logiciel Corsair iCU.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
13,99 €Clé USB Sandisk Ultra 64 Go à double connectique USB 3.1 Type A et C à 13,99 €
Valable jusqu'au 26 Juin

Amazon fait une promotion sur la clé USB Sandisk Ultra 64 Go à double connectique USB 3.1 Type A et C qui passe à 13,99 € alors qu'on la trouve ailleurs à plus de 25 €. Cette clé USB  dispose d'un connecteur réversible USB Type C et d'un connecteur classique de type A. Grâce à elle, transférez en toute simplicité et rapidement (jusqu'à 150 Mo/s) vos fichiers entre vos smartphones, tablettes et ordinateurs. 


> 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