Aller au contenu

requete


genmin

Sujets conseillés

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

Salut genmin,

Voici pour ta requète:

SELECT commentaire, MAX(date)
FROM TABLE1 A, TABLE2 B, TABLE3 C
WHERE A.ID_membre=B.ID_membre
AND B.ID_membre=C.ID_membre
AND date=MAX(date);

Si ça ne marche pas dis le moi. ;)

Lien vers le commentaire
Partager sur d’autres sites

oups il semblerai qu'il y ai un petit problème. :wacko:

Invalid use of group function, qu'il me donne !!!

je te donne ma requete complète, peut etre que j'ai fais une erreur. :P

$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

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

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

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

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

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

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.

:wacko:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Si, mais on te laisse mijoter :D

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 tables
WHERE date = $max_date
AND ....

voilà ;)

Lien vers le commentaire
Partager sur d’autres sites

j'arrvi po :sick: .

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

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

Posté (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é ??? :wacko:

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é par genmin
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...