par
moogli » 19 déc. 2016, 12:11
salut,
pour ajouter un peu d'info à ce que qu'indique @rthur, tu es dans le cas n*x + 1 requête, car tu va faire autant de requête que de ligne résultat de la première requêtes (n +1 qui est la requête d'origine) mais tu vas faire autant de requête que d'info dans le champs de la base de données PAR ligne de résultat.
imagine que tu ais 5 infos dans ta colonne intervenants pour toute lignes et que tu retournes 100 lignes tu va faire 501 requêtes sur la base de données alors que tu peux en faire une seule !!!!!
avec la structure d'@rthur :
table event_intervenants
- id_event
- id_intervenant
les deux colonnes formes la clef primaire pour éviter les doublons
la requête, certes plus complexe, est au final plus rapide, simple à comprendre et exploitable.
-- le select * c'est pas bien, remplace par les colonnes que tu as besoin
select nom, prenom from event_intervenants
join users u on id_intervenant = u.id
-- ajoute un prédicat au besoin si tu veux sélectionner qu'un seul event
Si tu veux les données de l'event tu fais une autre requête.
Si tu souhaites les données de plusieurs event il faut ajouter une jointure sur la table event.
La règle à suivre c'est de ne pas avoir à faire de requête SQL dans une boucle
et au passage tu découvres que tu as ajouter simplement une fonctionnalité : trouver tous les event auxquels un intervenant à participé (même requête en ajoutant une condition where id_entervenant = ).
bref un bon modèle c'est toujours gagnant
@+