genmin Posté 9 Mars 2004 Partager Posté 9 Mars 2004 Bonjour, voilà je voudrai réaliser une requete sur 3 tables. je m'explique : J'ai une table membre avec les champs ID_membre, nom etc... une 2ème table infos avec les champs ID_membre, type, etc... et une troisième, commentaire avec les champs ID_membre, commentaire, date. Voilà, pour info dans les 2 première tables il n'y a qu'un seul enregistrement par membre, par contre un membre peu avoir plusieur commentaire qui sont daté. Que dois je mettre dans ma requete pour sortir un tableau avec les infos de tous mes membres et uniquement leur dernier commentaire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
PhantomJoey Posté 10 Mars 2004 Partager Posté 10 Mars 2004 Salut genmin, Voici pour ta requète: SELECT commentaire, MAX(date)FROM TABLE1 A, TABLE2 B, TABLE3 CWHERE A.ID_membre=B.ID_membreAND B.ID_membre=C.ID_membreAND date=MAX(date); Si ça ne marche pas dis le moi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 10 Mars 2004 Auteur Partager Posté 10 Mars 2004 Merci Phantom Joey pour tout aide, j'essai et je te dis si ca marche Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 10 Mars 2004 Auteur Partager Posté 10 Mars 2004 oups il semblerai qu'il y ai un petit problème. Invalid use of group function, qu'il me donne !!! je te donne ma requete complète, peut etre que j'ai fais une erreur. $query_Recordset1 = "SELECT * FROM oempv3_subscribers, oempv3_extrafields, historique_com WHERE oempv3_subscribers.subscriber_id = oempv3_extrafields.subscriber_id AND oempv3_subscribers.subscriber_id = historique_com.subscriber_id AND historique_com.date = MAX(historique_com.date) AND oempv3_extrafields.Acquereur != '' AND oempv3_subscribers.statut = 'En cours' AND oempv3_subscribers.idnego= '$negoliste' AND oempv3_subscribers.agence='$agence' ORDER BY $trie"; Merci pour ton aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 10 Mars 2004 Partager Posté 10 Mars 2004 Bonjour, le MAX que tu places dans la partie WHERE de ta requète donne une erreur, c'est normal. On peut le placer uniquement dans la partie SELECT. Pour la date, on ne sait pas sous quelle format tu l'enregistres, et ca peut donc etre source d'erreur. Pour les tables, quand elles sont aussi longues (à écrire), tu devrais utiliser un alias.=> table1 AS t1 Ensuite, on n'a pas la valeur de $trie. C'est d'ailleurs là que se fera l'ordre que tu veux mettre avec MAX. Enfin, tu n'utilises pas LIMIT, qui te permettrait de n'avoir 'que' le dernier commentaire. Voilà, a+, Anonymus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 10 Mars 2004 Auteur Partager Posté 10 Mars 2004 Bonjour anonymus, Alors pour ce qui est du Max dans la partie where je venais juste de m'en rendre compte, ensuite pour les alias tu as surement raison mais je ne les mettrise pas totalement encore. Pour ce qui est de $trie il s'agit juste du nom d'une des colones pour faire un trie, par nom, budget, etc... Et pour finir je ne crois pas que LIMIT soit la commande à utiliser car je désire faire la liste de tout les enregistrements des membres mais avec uniquement leurs derniers commentaires. J'espère que je suis suffisement claire (pas facile à expliquer), si vous avez la moindre question je suis dispo. Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 10 Mars 2004 Partager Posté 10 Mars 2004 Penses aussi à ne pas surcharger les lignes. Une commande par ligne, c'est suffisant, tu y gagnera en clarté, et sql comprend les sauts de ligne. La requete donnerait ceci : SELECT * FROM oempv3_subscribers AS os, oempv3_extrafields AS oe, historique_com AS hc WHERE os.subscriber_id = oe.subscriber_id AND os.subscriber_id = hc.subscriber_id AND oe.Acquereur != '' AND os.statut = 'En cours' AND os.idnego= '$negoliste' AND os.agence='$agence' ORDER BY $trie Mais j'ai enlevé le MAX, ainsi que la date. Il te faut une clause LIMIT, ainsi que nous dire quel est le format du champ date. Anonymus. ps : au fait, date est un mot clé du sql. Tu aurais dû en choisir un autre Lien vers le commentaire Partager sur d’autres sites More sharing options...
PhantomJoey Posté 10 Mars 2004 Partager Posté 10 Mars 2004 Pour les allias c'est simple : Par exemple: oempv3_subscribers as S Puis lorsque tu l'utilise, dans le where par exemple: S.subscriber_id=....... Pour le LIMIT je ne sais pas comment l'utiliser car je sais que si par exemple: LIMIT 0,30 Cela va te donner les enregistrement de la ligne 0 à 30 de ton résultat. C'est tout ce que je peux te dire. Désolé de ne pas pouvoir plus t'aider. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 10 Mars 2004 Partager Posté 10 Mars 2004 Utilisation du limit : La première valeur donne la ligne de départ, la deuxieme valeur donne le nombre de lignes. Donc effectivement, dans LIMIT 0,30, sql te retourne les lignes : - à partir de la ligne 0 - pendant 30 lignes. Tu auras donc 30 lignes. Anonymus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 10 Mars 2004 Auteur Partager Posté 10 Mars 2004 Merci tous c'est bon conseil, j'ai compris pour les alias. Pour la date je suis sous la forme 0000-00-00. Pour ce qui est du LIMIT il ne vas pas faire ce que j'attends. Il vas me limiter à un certain nombre d'enregistrement alors que je les veux tous de la table subscribers mais seulemnt le plus récent de la table commentaire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 18 Mars 2004 Auteur Partager Posté 18 Mars 2004 ya plus personnes ????? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 18 Mars 2004 Partager Posté 18 Mars 2004 Bonjour, Si, mais on te laisse mijoter Normalement, sql permet de faire des requetes imbriquées. Mais ca ne marche pas toujours avec mysql. La solution consiste donc à trouver dans un premier temps le max(date). Pour cela, une simple requete suffit : $max_date == SELECT max(date) FROM historique_com Ensuite, tu fais la recherche avec la nouvelle valeur, en donnant dans le WHERE la valeur retournée par la première requète. SELECT * FROM tablesWHERE date = $max_dateAND .... voilà Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 18 Mars 2004 Auteur Partager Posté 18 Mars 2004 Je vais essaier, merci pour le coup de main Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 18 Mars 2004 Auteur Partager Posté 18 Mars 2004 j'arrvi po . Je crois que je vais laisser tomber car plus ca vas et plus je pense que c'est pas possible...... A moin de passer par une table tempo, j'ai apercu ca, je sais pas si peu fonctionner, je me documente. A+ Genmin Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 18 Mars 2004 Partager Posté 18 Mars 2004 Intéresses toi aux balises HAVING et GROUP BY, elles permettent probablement de faire ce que tu cherches. Nico. Lien vers le commentaire Partager sur d’autres sites More sharing options...
genmin Posté 22 Mars 2004 Auteur Partager Posté 22 Mars 2004 (modifié) Je ne comprend pas tout là. J'ai une requete qui me trouve bien la dernière date de commentaire mais pas moyen de sortir le commentaire associé ??? SELECT T1.fname, T1.subscriber_id, T2.subscriber_id, MAX(T2.date), MAX(T2.com_id), T2.commentaire FROM oempv3_subscribers AS T1, historique_com AS T2 WHERE T1.subscriber_id = T2.subscriber_id GROUP BY T1.subscriber_id voici le resultat : fname subscriber_id subscriber_id MAX(T2.date) MAX(T2.com_id) commentaire FRITZ 3 3 2004-03-06 6 ou la la la tres chiant lui! BOUCHARD 7 7 2004-03-09 7 po gentil seulemnt voilà le commentaire ne correspond pas à la date ??? A+Genmin Modifié 22 Mars 2004 par genmin Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant