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

Résolu/Fermé
TUCS - 17 avril 2020 à 11:17
 TUCS - 17 avril 2020 à 18:38
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
A voir également:

3 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
17 avril 2020 à 11:41
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
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649 > TUCS
17 avril 2020 à 12:52
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
Modifié le 17 avril 2020 à 14:27
$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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649 > TUCS
17 avril 2020 à 14:27
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
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
17 avril 2020 à 14:52
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
Modifié le 17 avril 2020 à 14:55
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
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
17 avril 2020 à 15:01
Testes le code que je t'ai donné... tu vas obtenir le nombre voulu... dans la variable $NB
0
TUCS > jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
17 avril 2020 à 15:08
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 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
17 avril 2020 à 15:13
Il y avait une erreur dans le nom de ma colonne... Le problème est résolu
0
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