vero Posté 5 Novembre 2005 Posté 5 Novembre 2005 bonjour, je recherche dans une base "messagerie" les champs "Pseudo"et "lu" par exemple à extraire tous les pseudos qui ont plus de 20 enregistrements dont le champs lu est egal à 0. exemple: phil 28 lu marc 25 lu laurence 21 lu voila si quelqu'un peux m'aider vero
Dan Posté 5 Novembre 2005 Posté 5 Novembre 2005 Bonjour, Si tu recherches juste la syntaxe de la requête, la voici: Select * from messagerie where enregistrements>'20' and lu='0' Avec les bons noms de champs ce serait mieux. Je considère ici que "enregistrements" contient le nombre d'enregistrements. A modifier selon le nom du champ chez toi. Dan
vero Posté 5 Novembre 2005 Auteur Posté 5 Novembre 2005 j'ai du mal expliquer les champs de la base sont "pseudo" et "lu" et je sais pas comment obtenir le nombre d'enregistrements car il faudrait une requete qui compte les lignes par pseudo? merci
manito Posté 5 Novembre 2005 Posté 5 Novembre 2005 Bonjour, Tu peux le faire avec 2 tables. La premiere "membres" contient les champs : -Id membre -Pseudo (1 seul enregistrement par pseudos) -nb_de_nouv_mess La deuxieme "messagerie" contient les champs : -Id mess -Id membre -message -lu A chaque qu'un nouveau message arrive a pseudo on incrémante "nb_de_nouv_mess" de 1. Et a chaque fois que pseudo lit un nouveau message on décrémante "nb_de_nouv_mess" de 1. -->nb_de_nouv_mess = messages ou lu = 0 Et maintenant c'est facile. $sql = "SELECT Pseudo FROM membres WHERE nb_de_nouv_mess>20"; C'est surement pas la façon la plus simple mais ça peut p'tetre t'aider. A+
vero Posté 5 Novembre 2005 Auteur Posté 5 Novembre 2005 merci pour ta reponse mais la table existe deja il doit bien y avoir une possibilité dans une table de compter le nombre d'enregistrements 'lu' par pseudo ?
Dan Posté 5 Novembre 2005 Posté 5 Novembre 2005 Avec la fonction count() intégrée à mysql, tout simplement, non ?
vero Posté 5 Novembre 2005 Auteur Posté 5 Novembre 2005 non helas ca marche pas j'ai essayé $sql = "SELECT lu='0', COUNT(*) FROM messagerie GROUP BY destinataire DESC LIMIT 0, 30 "; merci pour vos idees
Dan Posté 6 Novembre 2005 Posté 6 Novembre 2005 Plutôt ceci, non ? $sql = "SELECT lu,destinataire,COUNT(*) FROM messagerie where lu='0' GROUP BY destinataire DESC ";
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 merci en effet c'est sur la bonne voie mais je n'arrive pas à afficher le resultat de count(*) sur la page php par contre dans phpadmin ca donne le bon resultat sauf que je voudrai afficher que les resultats superieur à 20 voila si quelqu un peut completer...
Dan Posté 6 Novembre 2005 Posté 6 Novembre 2005 Les résultats où le count(*) est supérieur à 20 ? Remplace le "where lu='0'" par "where lu='0' and count(*) > '20'" , ca devrait marcher.
Vincent Posté 6 Novembre 2005 Posté 6 Novembre 2005 pour rajouter un critere sur une clause group by, il faut utiliser HAVING Si j'ai bien compris la demande formulée... SELECT destinataire,COUNT(*) as nb FROM messagerie where lu='0' GROUP BY destinataire HAVING nb>20 DESC
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 desolé ca marche pas et pourriez vous me dire ce qu'il faut que je mette pour lire le resultat dans une page php car j'affiche le champs destinataire mais pas le champs count(*) merci pour votre aide
Vincent Posté 6 Novembre 2005 Posté 6 Novembre 2005 ca marche pas, c'est trop vague... quand j'execute une requete, habituellement, j'ai soit : - un resultat - une erreur pour le champs count(*), pour avoir les idées claires, moi je lui donne une 'etiquette' : count(*) as monetiquette comme cela, après je sais le récupérer facilement
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 voila l'erreur requête SQL : SELECT destinataire, COUNT(*) FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20 DESC LIMIT 0, 30MySQL a répondu:You have an error in your SQL syntax near 'DESC LIMIT 0, 30' at line 1 quand au passage sur la monetiquette j'y comprend rien... merci d'avance
Vincent Posté 6 Novembre 2005 Posté 6 Novembre 2005 enleve le DESC.... c'est pour classer le resultat , mais il faut d'abord avoir un resultat plaisant avant de vouloir le classer SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 merci ca marche bien dans phpadmin mais j'arrive pas à afficher les resultats dans la page en php. J'arrive a afficher les pseudos mais pas les chiffres de count(*) encore un effort et ca va etre bon
Vincent Posté 6 Novembre 2005 Posté 6 Novembre 2005 comment tu fais pour afficher les pseudo? parce que le count c'est pareil sauf que c'est la valeur suivante (que j'ai appelé 'nb' grâce au 'as nb')
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 bonjour tout marche bien il ne me reste plus qu'a classer les resultats or si je met DESC à la fin de la requete je suis en erreur... une derniere idee...
Vincent Posté 6 Novembre 2005 Posté 6 Novembre 2005 SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20 ORDER BY nb desc
vero Posté 6 Novembre 2005 Auteur Posté 6 Novembre 2005 merci vincent tout fonctionne parfaitement bien bravo pour l'aide
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant