Select count(*) from ... where ... && ... && ...

Résolu
rolly41 Messages postés 281 Statut Membre -  
 Profil bloqué -
Bonjour,

Je souhaite afficher à mes membres le nombre de message privé non lu qu'ils ont reçus, pour cela, j'utilise cette requête :
$sql = 'SELECT COUNT(*) FROM messages_prive WHERE destinataire="'.$id.'" && etat="non lu" && destinataire_del="off"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($req);
if($data[0])
{
echo '(<font color="#009900">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}
else
{
echo '<font color="#ff0000">MP Indisponible</font> | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
}


Voici ce qui s'affiche : MP Indisponible

Informations :
La table et les champs existent tous.
J'ai l'erreur uniquement si aucune ligne correspond à ma recherche.

Où aurais-je pus faire une erreur ?

2 réponses

  1. MrYAU31 Messages postés 4631 Statut Membre 1 630
     
    Bonjour,

    Pour tester si tu as un résultat, tu fais
    if($data[0])

    Essaye plutôt
    if(mysql_num_rows($req)>0)

    Ça t'indiquera si tu as au moins 1 ligne en retour. Pense également à tester les erreurs de requête avant. C'est plus propre ;-)
    0
    1. Utilisateur anonyme
       
      Non ! Sa requête c'est SELECT COUNT(*) FROM... Il y a une ligne de réponse et une seule. Il est inutile de tester mysql_num_rows
      Et il teste bien l'erreur dans l'exécution de la requête.
      0
    2. MrYAU31 Messages postés 4631 Statut Membre 1 630
       
      Oups, j'ai lu trop vite. Désolé.
      Du coup, je vois pas l'intérêt du test sur $data[0]...
      0
    3. rolly41 Messages postés 281 Statut Membre 1
       
      je viens de remettre des lignes dans la table et cela fonctionne, mais j'ai MP Indisponible SI il n'y a aucune ligne qui correspond à la requête que je viens de faire ...

      Pourquoi ai-je "MP Indisponible" au lieu de "(0) MP non lu"
      0
    4. Ysabe_l Messages postés 11945 Date d'inscription   Statut Contributeur Dernière intervention   277
       
      Il me semble que c'est parce que tu lui dis que si il y a un résultat (donc au moins un MP) d'afficher le nombre et si il n'y a pas de résultat (donc 0 MP) d'afficher "MP indisponible".
      0
    5. rolly41 Messages postés 281 Statut Membre 1
       
      Voici ma nouvelle requête qui fonctionne très bien :
      $sql = 'SELECT COUNT(*) FROM messages_prive WHERE destinataire="'.$id.'" && etat="non lu" && destinataire_del="off"';
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
      $data = mysql_fetch_array($req);
      if($data[0]=='0')
      {
      echo '(<font color="#00ff00">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
      }
      elseif($data[0]!='0')
      {
      echo '(<font color="#ff0000">'.$data[0].'</font>) MP non lu | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
      }
      else
      {
      echo '<font color="#ff0000">MP indisponible</font> | <a href="deconnexion.php"><font color="#ff0000">Déconnexion</font></a>';
      }
      0
  2. Profil bloqué
     
    Salut,

    Je pense que ça

    if($data[0])

    n'est pas correct.

    Fait un print_r($date); avant et dit moi ce qu'il t'affiche.

    J'aurais plutôt fait comme ça :

    if($data[0]==0)
    0
    1. MrYAU31 Messages postés 4631 Statut Membre 1 630
       
      C'est ce qu'il a fait et c'est bon ;-)
      0
    2. Profil bloqué
       
      ^^ j'avais pas actualisé la page ^^
      0