Version complète: sur le forum Webmaster Hub : requete php
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
vero
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
Bonjour,

Si tu recherches juste la syntaxe de la requête, la voici:
SQL
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
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
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.


CODE
$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
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
Avec la fonction count() intégrée à mysql, tout simplement, non ?
vero
non helas ca marche pas j'ai essayé

CODE
$sql = "SELECT lu='0', COUNT(*) FROM messagerie GROUP BY destinataire DESC LIMIT 0, 30 ";


merci pour vos idees
Dan
Plutôt ceci, non ?
CODE
$sql = "SELECT lu,destinataire,COUNT(*) FROM messagerie where lu='0' GROUP BY destinataire DESC ";
vero
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
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
pour rajouter un critere sur une clause group by, il faut utiliser HAVING

Si j'ai bien compris la demande formulée...

SQL
SELECT destinataire,COUNT(*) as nb FROM messagerie where lu='0' GROUP BY destinataire HAVING nb>20 DESC
vero
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
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
voila l'erreur

CODE
requête SQL :  

SELECT destinataire, COUNT(*) FROM messagerie where lu=0  GROUP BY destinataire HAVING nb>20 DESC LIMIT 0, 30

MySQL 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
enleve le DESC.... c'est pour classer le resultat , mais il faut d'abord avoir un resultat plaisant avant de vouloir le classer wink.gif
SQL
SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20
vero
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
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
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
SQL
SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20 ORDER BY nb desc
vero
merci vincent tout fonctionne parfaitement bien bravo pour l'aide
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.