[MySQL] Requête pour les nuls

Milles excuses d’avance pour une question aussi basique, mais on a tous dû débuter un jour :stuck_out_tongue:

J’ai actuellement 3 tables, de la forme suivante (elles sont volontairement simplifiées, en vrai elles contiennent beaucoup plus de champs) :

[code][EVENEMENT]
id_evenement, int(11), PRIMARY AUTO-INCREMENT
nom, varchar(80)

[SITE]
id_site, int(11), PRIMARY AUTO-INCREMENT
nom, varchar(80)

[SITE_EVENT]
id_site, int(11)
id_evenement, int(11)[/code]

Donc, de cette manière je peux lier un évènement à plusieurs sites. Mais du coup je galère comme le gros débutant que je suis sur les requêtes. Jusqu’ici j’utilisais une fonction maison pour me simplifier les requêtes simples, et qui me sortait les réponses sous forme d’array de la manière suivante, avec un foreach par exemple :

$events contenant les réponses à une requete pour sortir toutes les entrées de la table [EVENEMENT]

foreach ($events as $v) {   echo "$v[nom] "; }

Ce qui me donne :

nom_evenement_1 nom_evenement_2 nom_evenement_3

Donc pour les requêtes simples, no soucis. Mais là je veux sortir tous les évènements appartenant à tel site, donc touts les champs des entrées de [EVENEMENT] appartenant à id_site.

Je me suis initié il y a peu aux jointures, mais là avec cette table [SITE_EVENT] qui vient s’intercaler, je suis un peu paumé.

Pourriez vous m’éclairer sur la marche à suivre ? J’espère ne pas être trop brouillon dans mes explications :stuck_out_tongue:

Merci d’avance !

A vue de nez (mais mon SQL date d’il y a longtemps, donc je peux me planter)

si tu as déjà récupéré l’id_site et que tu l’as mis dans la variable $id_site.

Ca te donne ainsi la liste des id_evenement et noms des évènements concernant le site donc l’id est $id_site

Edit: j’avais mis site au lieu de site_event dans le FROM

[quote name=‘El_Kazar’ date=’ 21 Dec 2004, 15:31’][code][EVENEMENT]
id_evenement, int(11), PRIMARY AUTO-INCREMENT
nom, varchar(80)

[SITE]
id_site, int(11), PRIMARY AUTO-INCREMENT
nom, varchar(80)

[SITE_EVENT]
id_site, int(11)
id_evenement, int(11)[/code]
[right][post=“315246”]<{POST_SNAPBACK}>[/post][/right][/quote]

Si j’ai bien compris ce que tu veux la requete SQL devrait donner :

Ca ça te donne la correspondance evenement - site.

C a te va ou bien?

apres y a les LEFT JOIN mais ce qu’on t as donné devrait largement suffire.

un canon ou bien?

[quote name=‘peuh_’ date=’ 21 Dec 2004, 16:22’]C a te va ou bien?

apres y a les LEFT JOIN mais ce qu’on t as donné devrait largement suffire.

un canon ou bien?
[right][post=“315265”]<{POST_SNAPBACK}>[/post][/right][/quote]
c’est pas une vieille codification pour les jointure externe le LEFT JOIN ?

[quote name=‘azacreel2’ date=’ 21 Dec 2004, 16:47’]c’est pas une vieille codification pour les jointure externe le LEFT JOIN ?
[right][post=“315270”]<{POST_SNAPBACK}>[/post][/right][/quote]
Non pas forcément, ça dépend ce que tu veux récupérer.

[quote name=‘azacreel2’ date=’ 21 Dec 2004, 16:47’]c’est pas une vieille codification pour les jointure externe le LEFT JOIN ?
[right][post=“315270”]<{POST_SNAPBACK}>[/post][/right][/quote]

Ben pas vraiment. Moi aussi j’ai commencé avec les =(+) ou les *= et j’en ai d’ailleurs beaucoup plus l’habitude et je les utilise beaucoup plus souvent.

Mais LA norme c’est bien l’ANSI SQL 92. Dire que je croyais que c’était une invention débile d’Access (qui a le mérite par contre avec cette syntaxe hyper contraignante d’avoir un éditeur de requête graphique très clair).

Mais à moins de se lancer dans les FULL OUTER JOIN ou autre, c’est vraiment lourd les JOIN ANSI. D’ailleurs pour les outils style Business Objects ou autre c’est inutilisable.

[quote name=‘El_Kazar’ date=’ 21 Dec 2004, 15:31’]Je me suis initié il y a peu aux jointures, mais là avec cette table [SITE_EVENT] qui vient s’intercaler, je suis un peu paumé.
[right][post=“315246”]<{POST_SNAPBACK}>[/post][/right][/quote]
Après avoir lu les explications des messages au dessus tu peux regarder aussi ce lien qui est très didactique

Le SQL de A à Z - le SELECT sur plusieurs tables - (sqlpro.developpez.com)

merci pour la precision, j’utilise régulierement les (+) (environnement oracle avec du BO a coté), mais il me semblais avoir vu le LEFT JOIN dans un vieux bouquin, d’ou ma question :stuck_out_tongue:

Body, tu peux préciser svp? Ca permet quoi de plus? (j’ai tendance a en bouffer en ce moment des jointure externe, donc mes questions sont tres intéressées :stuck_out_tongue: )

Merci ! Merci beaucoup, je suis arrivé à faire ce que je voulais. Et en plus on me file les bonnes url sans même que je le demande, si c’est pas du service ça :stuck_out_tongue:

J’ai toujours fonctionné à la tambouille avec le SQL, mais du coup je m’aperçois que j’ai encore de relativement beaux restes de mes cours d’UML pour repartir sur de meilleures bases. Ca va, je ne pars pas de trop loin :stuck_out_tongue:

ah mais c est ça AUSSI Cafzone, bon maintenant 150€, une boite de chocolat, ou ton cul…

c’est bien d’apprendre les jointures, va falloir colmater…

[Edit]
j’ai failli dire un romot