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

Résolu
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. 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 ;-)
    1. 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.
    2. Oups, j'ai lu trop vite. Désolé.
      Du coup, je vois pas l'intérêt du test sur $data[0]...
    3. 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"
    4. Contributeur
      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".
    5. 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>';
      }
  2. 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)
    1. C'est ce qu'il a fait et c'est bon ;-)
    2. ^^ j'avais pas actualisé la page ^^