[PHP MYSQL]

[PHP MYSQL] - PHP - Programmation

Marsh Posté le 20-06-2004 à 18:57:44    

Bonjour,
je fais une espece de site intranet pour la gestion de gamin pour un camp de vacance.
et j'ai quelque souci pour sortir des listing:
en effet il existe une table inscription dans ma base de donnée qui contient les champ suivant:
enfant_id groude_id periode
 
vous l'aurez devinez : les deux premier champs sont les clé se raportant au groupe et à l'enfant et periode est un cham de type date correspondant à la date ou l'enfant va aller à son activite.
 
le probleme étant qu'un enfant peut aller à plusieur activité en une journée (donc plusieur ligne dans la table)
 
les entete du tableau pour le listing se presente à peut pret ainsi: nom|prenom|age|classe|groupe1(par ex garderie matin)|groupe2(ex: repas)|groupe3(ex:garderie aprem)....
 
donc nom, prenom, age et classe sont des info que je vais trouver dans la table du gamin (je devrait surement faire un classement par orde alphabetique(donc pas par ID))
et ensuite la ou il y a les groupes, mettre des croi si le gamin est inscrit et rien sinon (ou un truc du genre)
 
ca serait bien d'arriver à faire une super requete qui fasse tout si vous avez une idée???

Reply

Marsh Posté le 20-06-2004 à 18:57:44   

Reply

Marsh Posté le 20-06-2004 à 21:50:54    

Donc si j'ai bien compris, tu as 2 tables. L'une ou tu as les info sur les gamins et l'autre c celle ki contient enfant_id groupe_id periode et tu veux ke ca te sorte des donées venant des 2 tables? Dit moi si c ca, que je te concocte la rekete sql :D

Reply

Marsh Posté le 20-06-2004 à 22:57:54    

Code :
  1. SELECT a.nom,a.prenom,a.age,a.classe,b.groupe_id FROM table1 a LEFT JOIN table2 b ON a.id=b.enfant_id


Ca te renvoie la liste des gamins avec leurs infos et le groupe auquel ils sont attachés (qu'ils soient inscrits quelque part ou pas)


Message édité par Ayuget le 20-06-2004 à 22:59:16
Reply

Marsh Posté le 21-06-2004 à 08:10:12    

lol bizard ta rekette ayuget :D moi j'aurais plutot vu :
 
SELECT a.nom,a.prenom,a.age,a.classe,b.groupe_id FROM a,b WHERE a.id = b.enfant_id
 
Enfin bon si les 2 marches, c ca l'essentiel :D

Reply

Marsh Posté le 21-06-2004 à 09:13:36    

c'est pas bizzare, c'est une autre norme SQL (celle native de Mysql)  
 
left join, outer join etc
 
la première est peut-être plus rapide (quoique j'en doute) mais il est vrai moins facile à comprendre


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 09:38:50    

Je dis bizard pask je connais pas :D, dans mes boukins j'ai tj vu la mienne (c pr ca ke j'utilise ke celle la ;) ) mais c bon a savoir k'il y a plusieurs types :D

Reply

Marsh Posté le 21-06-2004 à 09:50:13    

JagStang a écrit :

c'est pas bizzare, c'est une autre norme SQL (celle native de Mysql)  
 
left join, outer join etc
 
la première est peut-être plus rapide (quoique j'en doute) mais il est vrai moins facile à comprendre


bah l'avantage c'est que là, les gamins ne sont pas obligés d'être inscrits à un groupe pour être affichés. Ca peut servir si il veut faire des pré-inscriptions ou des trucs comme ca.  
Enfin, c'est ce que j'ai pensé  [:romn]

Reply

Marsh Posté le 21-06-2004 à 13:39:35    

esox_ch a écrit :

lol bizard ta rekette ayuget :D moi j'aurais plutot vu :
 
SELECT a.nom,a.prenom,a.age,a.classe,b.groupe_id FROM a,b WHERE a.id = b.enfant_id
 
Enfin bon si les 2 marches, c ca l'essentiel :D

Une jointure en SQL standard c'est avec JOIN. La requête que tu donne n'est pas "standard SQL" pour une jointure mais elle donne un resultats identique grâce à la restriction que tu mets (a.id=b.enfant_id).
 
Conceptuellement (en algèbre relationnelle qui est la base du SQL) faire un JOIN ou un WHERE ça n'a rien à voir :)

Reply

Marsh Posté le 21-06-2004 à 13:59:39    

ratibus a écrit :

Une jointure en SQL standard c'est avec JOIN. La requête que tu donne n'est pas "standard SQL" pour une jointure mais elle donne un resultats identique grâce à la restriction que tu mets (a.id=b.enfant_id).
 
Conceptuellement (en algèbre relationnelle qui est la base du SQL) faire un JOIN ou un WHERE ça n'a rien à voir :)


Ben nan pas tout à fait...
Là, si un enfant n'est inscrit à aucun groupe, l'enregistrement ne sera pas retourné.

Reply

Marsh Posté le 21-06-2004 à 14:11:54    

Ayuget a écrit :

Ben nan pas tout à fait...
Là, si un enfant n'est inscrit à aucun groupe, l'enregistrement ne sera pas retourné.

Oui pour un LEFT JOIN.
 
Mais dans le cadre d'une équijointure (INNER JOIN), c'est équivalent (en tout cas pour MySQL) au niveau des performances.
 
Pour la lisibilité je trouve ça beaucoup moins lisible de faire les jointures avec un WHERE plutot qu'avec JOIN (le WHERE applique une restriction sur une source données tandis que le JOIN modifie cette source de données).

Reply

Marsh Posté le 21-06-2004 à 14:11:54   

Reply

Marsh Posté le 21-06-2004 à 16:37:05    

Ayuget a écrit :

Code :
  1. SELECT a.nom,a.prenom,a.age,a.classe,b.groupe_id FROM table1 a LEFT JOIN table2 b ON a.id=b.enfant_id


Ca te renvoie la liste des gamins avec leurs infos et le groupe auquel ils sont attachés (qu'ils soient inscrits quelque part ou pas)


 
oui ca, ca fonctionne si le gamin est inscrit a UN groupe mais si il est inscrit à plusieurs groupe j'aurai plusieur fois le meme enfant avec un groupe à chaque fois (don des doublon) alors ke je voudrai une seule fois l'enfant avec tous les ids de tous les groupe ou ils est inscrit...

Reply

Marsh Posté le 22-06-2004 à 10:19:59    

skazog59 a écrit :

oui ca, ca fonctionne si le gamin est inscrit a UN groupe mais si il est inscrit à plusieurs groupe j'aurai plusieur fois le meme enfant avec un groupe à chaque fois (don des doublon) alors ke je voudrai une seule fois l'enfant avec tous les ids de tous les groupe ou ils est inscrit...


bah ouais, mais après t'a aucune difficulté à récupérer les groupes où l'enfant est inscrit... (plusieurs enregistrements avec le même enfant seront retournés)

Reply

Marsh Posté le 22-06-2004 à 16:20:41    

l'idée c'était justement de pouvoir tout faire d'un coup
sinon la solution actuelle se resumer exactement à ce que tu dis Ayuget

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed