Recupération doonées bdd et traitement (comptage)

Résolu
TUCS -  
 TUCS -
Bonjour,
Je souhaite faire une discussion pour le personnel d'une association.
J'ai réussi à faire une bonne partie mais je bloque pour la notification des nouveaux messages.
J'ai un cadre où il est écrit "Boite de réception", j'aimerais dans ce cadre intégrer un rond avec le nombre de discussion avec des nouveaux messages que j'ai en attente (non lu).
Dans ma bdd j'ai l'ID de l'auteur et l'ID de destinataire.
J'aurais besoin de compter le nombre d'ID auteur différents qui on envoyé des messages à mon ID (ID destinataire).

Ma question est-ce qu'une requete sql, un script peut faire ça?
Une idée, une piste?

Bonne journée, prenez soin de vous!

Configuration: Windows / Firefox 75.0

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,


Ma question est-ce qu'une requete sql, un script peut faire ça?

Oui

Une idée, une piste?

Une requête SQL utilisant un COUNT par exemple.

Par contre, pour n'avoir que les non-lus, tu vas devoir gérer avec un champ supplémentaire dans ta table que tu pourras passer à "1" lorsque le message est lu par le destinataire.


0
TUCS
 
Merci Jordane45,
J'avais repéré ça mais je n'étais pas sûr et puis j'ai du mal à voir comment je dois faire...
Je dois juste faire cette requete: SELECT COUNT(IDauteur) FROM utilisateur WHERE IDdestinaire = mon id ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > TUCS
 
Oui.
Et si tu veux le nombre pas hauteur dans ce cas-là il faut en plus ajouter un group by
0
TUCS > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
$query002 = 'SELECT COUNT(ID) FROM forum_membres WHERE genre="987654321" AND correspondant="'.$B_ID.'"';
   $arr002 = $dbh->query($query002)->fetch();

Comme je sais ce code ne fonctionne pas... J'utilise toujours mes requêtes avec la seconde ligne et donc avec fetch. Mais dans ce cas ce n'est pas ce qu'il me faut. J'ai déjà fait des requetes avec autres choses que fetch mais impossibles de m'en souvenir ou retrouver une page avec un exemple.
Pourrais-tu me venir en aide?

Je sais que c'est les bases mais n'en faisant pas beaucoup, j'oublie de temps en temps une partie des bases. :(

Dans le where: genre c'est un nombre pour identifier le chat car il y en a plusieurs...
Dans cette requete je ne tiens pas encore compte du lu ou non lu.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > TUCS
 
Regarde ici et appliques ce qui est marqué;
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

A savoir que : le "fetch" retourne 1 ligne du résultat de la requête
fetchAll retourne un array avec TOUTES les lignes de résultat
0
TUCS
 
J'ai activé les erreurs

Dans ici je dois utiliser fetchall, c'est juste?

Je comprends pas... Moi je veux un chiffre en retour (x messages non-lu) et ici on parler de retourner un array
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ta requête doit te retourner combien de lignes ?
De cette réponse dépend quel "fetch" utiliser.

A savoir qu'on teste toujours ses requêtes DIRECTEMENT dans sa bdd (via phpmyadmin par exemple ) AVANT de les utiliser dans son code PHP.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu as également l'exemple de requête préparée qui se trouve dans le lien ?
Au lieu d'utiliser le ->query qui n'est pas sécurisé... utilises le prepare et le execute.
Le tout, comme dans l'exemple, dans un bloc try/catch.

//préparation de la requête et des variables
 $sql = 'SELECT COUNT(ID)  as NB
            FROM forum_membres 
              WHERE genre="987654321" 
                AND correspondant= :correspondant ';
 

 $datas = array(':correspondant '=>$B_ID);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
   $res = $requete->fetch();
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

$NB = !empty($res['NB']) ? $res['NB'] : 0;
0
TUCS
 
je veux que ça compte le nombre d'ID différent se trouve dans la colonne ID (la colonne ID étant l'envoyeur du message) et ayant la correspond avec mon id.
J'ai besoin que la requete me retourne un nombre, x messages non-lu. Je n'ai pas besoin des messages donc pas besoin de me retourner des lignes de la bdd
J'ai du mal...

Ah ça par contre je ne savais pas, je le ferais dorenavant
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Testes le code que je t'ai donné... tu vas obtenir le nombre voulu... dans la variable $NB
0
TUCS > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Il me retourne cette erreur:
Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined Les datas : Array ( [:correspondant ] => 1001 )
0
TUCS > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Il y avait une erreur dans le nom de ma colonne... Le problème est résolu
0
TUCS > TUCS
 
Jordane, cela m'écrit le nombre de messages non-lu... J'aimerais le nombre auteur différent avec des messages non-lu.
C'est une autre requete ou il faut juste mettre une précision dans la requete?

Ici tu m'écris 2 messages, ça écrire deux. Mon but c'est que peut importe le nbre de message que tu m'as envoyé ça met 1 car une personne à des messages non-lu.
0