Page 1 sur 1

trier une table à partir d'un champs dans une autre table

Posté : 21 juin 2017, 16:32
par jp.bond
bonjour
j'ai 2 tables, inscrits et évènements.
ma 1ere table contient la liste des évènements, chaque évènement ayant un id et une date
Ma 2e table "inscrits" contient les inscrits et l'id_évenement auquel ils sont inscrits, ce qui relie les 2 tables.

Je veux afficher la liste des inscrits à chaque évenement sur une seule page.
Les tableaux des inscrits de chaque évènement sont les uns sous les autres.
Ma requete est donc : SELECT * FROM inscrits ORDER BY id_evenement

Les inscrits sont donc listés par évenement, c'est ce que je veux, mais j'aimerai aussi trier en fonction de la date de l'évènement, pour ordonner les tableaux entre eux, de l'évènement le plus proche au plus éloigné
mais le champs date est lui dans ma table "evenement" et pas dans ma table "inscrits"

Comment faire ?
Il faut peut etre utilisé un tableau intermédiaire de stockage ? ou une requete imbriquée ?
je ne sais pas comment cela fonctionne...

merci de votre aide

Re: trier une table à partir d'un champs dans une autre table

Posté : 21 juin 2017, 16:36
par Spols
Le plus simple est de faire une jonction sur ta table évenement
SELECT i.*
FROM inscrits i
JOIN evenement e ON i.id_evenement = e.id_evenement
ORDER BY e.date

Re: trier une table à partir d'un champs dans une autre table

Posté : 01 sept. 2017, 17:31
par jp.bond
merci pour ton aide !
cela fonctionne... désolé pour la réponse tardive, mais je tenais à te remercier

Re: trier une table à partir d'un champs dans une autre table

Posté : 04 sept. 2017, 19:54
par jp.bond
Le plus simple est de faire une jonction sur ta table évenement
SELECT i.*
FROM inscrits i
JOIN evenement e ON i.id_evenement = e.id_evenement
ORDER BY e.date
il y a un truc que je ne comprends pas dans ta requete :
Tu utilises 2 fois "id_evenement", une fois du coté de la table evenement, et une fois du coté de la table inscrits...

ON i.id_evenement = e.id_evenement

Ma base d'évènements contient :
id | nom
Ma base Inscrits contient :
id | nom | id_evenement (avec id_evenement qui correspond à l'id de la base évènement)
donc la jonction devrait être :
JOIN evenement e ON i.id_evenement = e.id
non ?

Re: trier une table à partir d'un champs dans une autre table

Posté : 05 sept. 2017, 14:56
par Spols
Bien sur, mais je ne pouvais pas connaitre ta structure j'ai donc fait un exemple explicite. Il te faut bien sur l'adapter à ta structure.

Re: trier une table à partir d'un champs dans une autre table

Posté : 05 sept. 2017, 19:15
par jp.bond
ok merci.
c'est tellement nouveau pour moi que j'ai préféré vérifier que j'avais bien compris...
Derniere question...
De cette demande découle une utilisation concrète évidemment et j'ai un petit soucis :

Donc ma base d'évènements :
id | nom
Et ma base Inscrits :
id | nom | id_evenement (avec id_evenement qui correspond à l'id de la base évènement)

Et donc ma requete précédente etait :
SELECT * FROM inscrits ORDER BY id
et devient
SELECT i.*
FROM inscrits i
JOIN evenement e ON i.id_evenement = e.id
ORDER BY e.date

quand je passe ensuite dans mon while, j'utilise

Code : Tout sélectionner

$l_base1 = eco_connect(); $requete1 = "décrite au dessus"; resultat1 = eco_query($l_base1,$requete1); eco_close($l_base1); while ($enregistrement1 = mysql_fetch_array( $resultat1 )) { // j'appelle mon id $enregistrement1['id'] }
Avec mon ancienne requete, j'affichais donc l'id de ma table "inscrits"
mais à présent, je crois que j'affiche l'id de ma table "evenement" ?!
Et je ne comprends pas pourquoi... Je rêve, j'ai fait une coquille ou il y a quelque chose qui m'échappe ?

merci de ton temps...

Re: trier une table à partir d'un champs dans une autre table

Posté : 06 sept. 2017, 08:49
par Spols
Avec SELECT i.* tu ne recupère que les champs de la table inscrits.
Un SELECT * récupèrera les champs des 2 tables.

En règle générale, il vaut mieux toujours spécifier quelle champs tu veux récupèrer. en les séparant par une virgule et en les prefixant de la table pour lever les ambigüité. Tu peux aussi leur donner un alias pour les retrouver facilement dans ton code php.
Par exemple
SELECT i.id_evenement AS id_event, e.nom AS nom_event, i.nom AS nom_inscrit

ainsi tu récupérerales valeurs de ce que tu veux avec
$enregistrement['id_event']
$enregistrement['nom_event']
$enregistrement['nom_inscrit']

Re: trier une table à partir d'un champs dans une autre table

Posté : 06 sept. 2017, 10:45
par jp.bond
meeeerci !
voila le chainon manquant !
c'est bcp plus clair à présent
merci encore de ton aide