8797 sujets

Développement web côté serveur, CMS

bonjour,

je sus en traine decreer une base de données, et je constate que je risque de devoir faire des lignes de code type:

$bcle=mysql_query(select ident from premieretable where idrub="toto");
while($tab=mysql_fetch_array($bcle){
     $bcle2=mysql_query(select * from deuxiemetable where id= $tab['ident']);
     while($tab2=mysql_fetch_array($bcle2){
     echo $tab2['nom'].";".$tab2['prenom'];
    }
}

mais voila je ne sais pas si cela ne fait pas ramer l'explorer....auriez vous une tite idée?
Bonsoir,

Si j'ai bien compris ce que tu veux faire, c'est récupérer les couples (nom, prenom) dans ta table 'deuxiemetable' qui ont comme valeur d''id' un 'ident' d'un enregistrement de ta première table qui a "toto" comme valeur de l'attribut 'idrub' (pfiou... )

en SQL, cela te donnera la requête suivante :

SELECT d.nom, d.prenom
FROM deuxiemetable d, premieretable p
WHERE p.idrub="toto"
AND d.id = p.ident;

puis tu parcours les résultats gentiment comme tu le faisais déjà.

pour la culture : ça s'appelle un 'join'

Par contre, explorer ne risque pas de ramer, meme pour une requete longue et/ou difficile, puisque tout ca est exécuté du côté du serveur... explorer ne pourra qu'attendre en se tournant les pouces.

PS : la requete, jla fais sans aucun test, de mémoire uniquement... j'espère k'elle est pas bugguée Smiley cligne
Autre chose : j'espère pour toi quil n'y a pas de valeur 'NULL' pour les éléments sur lesquels tu fais des comparaisons, sinon ca complique enormément le bazar !
Pour faire des JOIN, il existe une instruction en SQL.

La syntaxe appropriée serait donc :
SELECT d.nom, d.prenom
FROM premieretable p
LEFT JOIN deuxiemetable d ON d.id = p.ident
WHERE p.idrub="toto"


Au passage, il ne faut jamais faire de "SELECT *". Je suis sûr que tu sais exactement quels champs de la table récupérer. Donc, là tu récupères des champs inutiles, ce qui est toujours ça de plus en consommation de ressources.

Autre chose, j'espère que tu as un index sur p.idrub, p.ident et d.id.
C'est tout à fait ca....mais je pensais que les join etaient mal gerés par mysql.... Smiley rolleyes

et en effet; il n'y a pas de valeur nul dans mes champs indéxés...


SELECT d.nom, d.prenom
FROM premieretable p
LEFT JOIN deuxiemetable d ON d.id = p.ident
WHERE p.idrub="toto"


y aurait il un endroit avec une explication sur la syntaxe des join??
sinon moi je m'aide de PHPmyAdmin pour rediger proprement des requetes
complexe (par contre je sait plus ou j'avait été dsl)
je trouve que le lien sur le join n'est pas clair...

pour que je comprenne pourriez vous me montrer la requete join pour afficher , le nom, prenom de la table utilisateur qui correspond au secteur x que je recupere pas un formulaire
base toto
table utilisateur :
ID_utilisateur;NOM;PRENOM

table secteur:
ID_secteur;Intitule_secteur;ID_utilisateur;
a écrit :

table utilisateur :
ID_utilisateur;NOM;PRENOM

table secteur:
ID_secteur;Intitule_secteur;ID_utilisateur;


Salut,

je serais toi je ferais un simple


SELECT a.nom, a.nom, b.intitule_secteur
FROM utilisateur a, secteur b
WHERE a.id_utilisateur = b.id_utilisateur


:)