Eviter deux requêtes

Répondre
Peacock
le 25/02/2005 à 11:00
Peacock
Bonjour,

Exposons le pb précisément :
un espace superadmin, page d'accueil requête qui liste tous les membres du site :
$requete="SELECT * FROM Membres__tbl ORDER BY Nom_Membre";

une boucle qui case tous ces GM dans un tableau :
$resultat=mySqlquery($requete); while($ligne=mysql_fetch_array($resultat))

A ce stade en même temps, je voudrais sortir la valeur du champs Date_Enregistrement sur d'une autre table Biens_tbl, reliée à Membres_Tbl par un id unique, comment faire sans effectué une requete dans la requete...

Pour éclaircir, j'ai la table Membres_tbl avec
pour champs :
- Membre_id
- Nom_Membre

et la table Biens_tbl avec pour champs :
- Membre_id_fk (même valeur que Membre_id)
- Biens_id
- Biens_Date-Enr (format datetime)

Donc je veux sortir le Nom_Membre de Membres_tbl et la date Biens_Date-Enr la plus récente...
en une seule requête, parce qu'une requête qui boucle au sein d'une boucle je sens que c'est pas très léger, ni trop conseillé...

Je sens bien qu'il va falloir poser un WHERE Membre_id=Membre_id_fk...
je manque de sommeil...
réveillez moi avant que je lourde la bécane dans la benne de tri sélectif...

merci aux non-énervés qui n'ont pas marre de répeter les même choses...

Bien à vous,
Peacock
Rex
le 25/02/2005 à 11:06
Rex
Lis ceci : Jointures
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
Peacock
le 25/02/2005 à 12:17
Peacock
Bon, les recoupements de table soit,
j'en suis pas aux premiers,
mais là je coince...

Si j'écris ça :

<?php
$requete="SELECT DISTINCT Nom_Membre, Biens_Date-Enr FROM Membres_tbl,Biens_tbl WHERE Membre_id=Membre_id_fk ORDER BY Nom_Membre";

mysql_select_db ($base);
$resultat=mySql_query($requete);
while($ligne=mysql_fetch_array($resultat))
{
$date = $ligne[Biens_Date-Enr];
sscanf($date, "%4s-%2s-%2s %2s:%2s:%2s", $date_Y, $date_m, $date_d, $date_H, $date_i, $date_s);


echo "<TR><TD >";
echo "<SPAN class='noir10-B'>$ligne[Nom_Prod]</SPAN></TD>";

echo "<TD align='right' valign='bottom' width='140'>";
echo "dernière modification : le $date_d / $date_m / $date_Y à $date_H : $date_i </TD></TR>";
php ?>


}

Ben là sur, ça me donne autant de dates que d'enregistrement avec le nom du Membre en face,
so what, caser une boucle du style :
<?phpfor(i=0;i<1,i++)php ?>

pour stopper au plus récent enregistrement ?

Je sens bien que c'est de l'easy-doing, but
je me sens embrumé et peu efficace...

Merci d'avance
Peacock
le 01/03/2005 à 14:37
Peacock
Bonjour,

Je m'y remet, mais ça patine...
Merci de votre aide...

a+
Peacock
le 01/03/2005 à 17:31
Peacock
Easy doing or not,
toujours dans les choux,
qui peut m'aider à bien construire ma requête.
Merci
LA GLOBULE
le 01/03/2005 à 17:36
LA GLOBULE
Un truc comme çà devrait suffire :

SELECT Membres_tbl.Membre_id AS id_membre, Biens_tbl.Biens_Date-Enr AS date FROM Membres_tbl, Biens_tbl WHERE Membres_tbl.Membre_id=Biens_tbl.Membre_id_fk


Les jointures sont pourtant expliquées dans le cours sur l'affichage des données d'une base.
Peacock
le 01/03/2005 à 17:55
Peacock
Salut La Globule,

Merci pour la rescousse,
but quand tu écris
AS id_membre et plus loin
AS date
c'est une erreur de frappe,
ou qu'est-ce ?
Car je n'ai pas de champs qui se nomme "id_membre" et "date"...

Quoiqu'il en soit je vois bien que tu es
de tous les fronts...
LA GLOBULE
le 01/03/2005 à 17:57
LA GLOBULE
Ben quand tu fais ton mysql_fetch_array, tu recuperes les champs 'date' et 'id_membre'.

Et non, ce n'est pas une erreur de frappe :)
Peacock
le 01/03/2005 à 18:07
Peacock
Ok, j'ai réécrit ma requête ensuivant ta syntaxe,
mais j'arrive un peu à la même chose,
j'ai la liste des membres avec autant de répétition qu'il y a d'enregistrement,
je voudrais sortir en face de chaque membre une seule date, la plus récente,
parce que là si Gino il à 6 disques répertorié dans la table,
j'ai 6 fois Gino avec la date en face...

Comment contraindre pour avoir que la dernière date ??
Peacock
le 01/03/2005 à 21:16
Peacock
OK,
j'ai la solution :

<?php $requete="SELECT DISTINCT prod_coord_tbl.Nom_Prod AS id_membre, max(prod_films_tbl.Date_Enregistrement) AS date FROM prod_coord_tbl, prod_films_tbl WHERE prod_coord_tbl.Num_Prod=prod_films_tbl.Num_Prod_fk GROUP BY id_membre"; php ?>


Quoiqu'il en soit merci encore LA GLOBULE.
a+
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours