Je voudrais obtenir le résultat suivant:
Directeur |Statut | Spécialité | Paris | E mail
-----------------------------------------------------------------------------------------------
Michel A. | Directeur | Anthropologie, identité, métissage | non | [email=Michel_AT_e.com]Michel_AT_e.com[/email]
Elsa A. | professeur |Cinéma, Journalisme | oui | [email=Alsa_AT_e.com]Alsa_AT_e.com[/email]
Domi B. | Directeur | Littérature, théâtre, cinéma | non | [email=domi_AT_e.com]domi_AT_e.com[/email]
J'obtiens:
Directeur |Statut | Spécialité | Paris | E mail
-----------------------------------------------------------------------------------------------
Michel A. | Directeur | Anthropologie | non | [email=Michel_AT_e.com]Michel_AT_e.com[/email]
Michel A. | Directeur | identité | non | [email=Michel_AT_e.com]Michel_AT_e.com[/email]
Michel A. | Directeur | métissage | non | [email=Michel_AT_e.com]Michel_AT_e.com[/email]
Elsa A. | professeur |Cinéma | oui | [email=Alsa_AT_e.com]Alsa_AT_e.com[/email]
Elsa A. | professeur |Journalisme | oui | [email=Alsa_AT_e.com]Alsa_AT_e.com[/email]
Domi B. | Directeur | Littérature | non | [email=domi_AT_e.com]domi_AT_e.com[/email]
Domi B. | Directeur | théâtre | non | [email=domi_AT_e.com]domi_AT_e.com[/email]
Domi B. | Directeur | cinéma | non | [email=domi_AT_e.com]domi_AT_e.com[/email]
J'utilise
SQL
SELECT *
FROM chercheur AS t1, appartenanceED AS t2, ecoleDoctorale AS t3,statutChercheur AS t4, chercheurSpecialite AS t5, specialite AS t6
WHERE t1.idChercheur = t2.idChercheur AND t2.idEcoleDoctorale = t3.idEcoleDoctorale AND t1.idStatutChercheur = t4.idStatutChercheur AND t1.idChercheur = t5.idChercheur AND t5.idSpecialite = t6.idSpecialite AND t3.numeroEcoleDoctorale =122 AND t1.nature = 'enseignant chercheur'
ORDER BY t1.nom
LIMIT 0, 30 " ;
FROM chercheur AS t1, appartenanceED AS t2, ecoleDoctorale AS t3,statutChercheur AS t4, chercheurSpecialite AS t5, specialite AS t6
WHERE t1.idChercheur = t2.idChercheur AND t2.idEcoleDoctorale = t3.idEcoleDoctorale AND t1.idStatutChercheur = t4.idStatutChercheur AND t1.idChercheur = t5.idChercheur AND t5.idSpecialite = t6.idSpecialite AND t3.numeroEcoleDoctorale =122 AND t1.nature = 'enseignant chercheur'
ORDER BY t1.nom
LIMIT 0, 30 " ;
Pour éviter cela, il faudrait que j'utilise GROUP_CONCAT() dans mysql de cette façon:
SQL
SELECT *
GROUP_CONCAT(DISTINCT t6.nomChercheurSpecialite
ORDER BY nomChercheurSpecialite ASC SEPARATOR ",")
FROM chercheur AS t1, appartenanceED AS t2, ecoleDoctorale AS t3,statutChercheur AS t4, chercheurSpecialite AS t5, specialite AS t6
WHERE t1.idChercheur = t2.idChercheur AND t2.idEcoleDoctorale = t3.idEcoleDoctorale AND t1.idStatutChercheur = t4.idStatutChercheur AND t1.idChercheur = t5.idChercheur AND t5.idSpecialite = t6.idSpecialite AND t3.numeroEcoleDoctorale =122 AND t1.nature = 'enseignant chercheur'
GROUP BY t1.nom
LIMIT 0, 30 " ;
GROUP_CONCAT(DISTINCT t6.nomChercheurSpecialite
ORDER BY nomChercheurSpecialite ASC SEPARATOR ",")
FROM chercheur AS t1, appartenanceED AS t2, ecoleDoctorale AS t3,statutChercheur AS t4, chercheurSpecialite AS t5, specialite AS t6
WHERE t1.idChercheur = t2.idChercheur AND t2.idEcoleDoctorale = t3.idEcoleDoctorale AND t1.idStatutChercheur = t4.idStatutChercheur AND t1.idChercheur = t5.idChercheur AND t5.idSpecialite = t6.idSpecialite AND t3.numeroEcoleDoctorale =122 AND t1.nature = 'enseignant chercheur'
GROUP BY t1.nom
LIMIT 0, 30 " ;
MAIS LE SERVEUR QUI HEBERGE LE SITE EST EN MYSQL 4.0
ET LA FONCTION GROUP_CONCAT() n'existe qu'à partir de mysql 4.1
Ma question: comment obtenir le même résulatat avec du PHP, en tenant compte de
la version MYSQL 4.0 et PHP 4?
Merci