Version complète: sur le forum
Webmaster Hub :
requete php
vero
samedi 5 novembre 2005 à 14:44
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
samedi 5 novembre 2005 à 14:48
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
samedi 5 novembre 2005 à 14:58
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
samedi 5 novembre 2005 à 16:31
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
samedi 5 novembre 2005 à 16:58
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
samedi 5 novembre 2005 à 17:30
Avec la fonction count() intégrée à mysql, tout simplement, non ?
vero
samedi 5 novembre 2005 à 20:41
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
dimanche 6 novembre 2005 à 11:01
Plutôt ceci, non ?
CODE
$sql = "SELECT lu,destinataire,COUNT(*) FROM messagerie where lu='0' GROUP BY destinataire DESC ";
vero
dimanche 6 novembre 2005 à 11:31
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
dimanche 6 novembre 2005 à 11:40
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
dimanche 6 novembre 2005 à 12:01
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
dimanche 6 novembre 2005 à 12:09
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
dimanche 6 novembre 2005 à 12:14
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
dimanche 6 novembre 2005 à 12:17
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
dimanche 6 novembre 2005 à 12:27
enleve le DESC.... c'est pour classer le resultat , mais il faut d'abord avoir un resultat plaisant avant de vouloir le classer

SQL
SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20
vero
dimanche 6 novembre 2005 à 13:01
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
dimanche 6 novembre 2005 à 13:06
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
dimanche 6 novembre 2005 à 13:20
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
dimanche 6 novembre 2005 à 13:47
SQL
SELECT destinataire, COUNT(*) as nb FROM messagerie where lu=0 GROUP BY destinataire HAVING nb>20 ORDER BY nb desc
vero
dimanche 6 novembre 2005 à 17:09
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.