Page 1 sur 1

Eviter un COUNT avant un SELECT

Posté : 30 août 2006, 14:39
par spirou
Bonjour,

Encore une question, j'arrête pas je sais :P

J'aimerais éviter un COUNT dans une table, avant un SELECT.
C'est un peu une requête inutile.

Par exemple, pour les messages lus/nonlus d'un forum.

Le futur membre s'inscrit et affiche l'index du forum, si je ne fait pas un COUNT avant de sélectionner les sujets lus ayant pour id celui du nouveau membre, je me retrouve avec une erreur puisque ce membre n'a encore lu aucun sujet, logique puisque le SELECT ne retourne aucun résultat.

Donc, y'a t-il une astuce, à part cacher les messages d'erreurs qui puisse me faire sélectionner dans la table seulement si au moins une ligne existe, du même genre que IF EXISTS pour un DROP, CREATE table ?

Posté : 30 août 2006, 16:00
par ouckileou
if (mysql_num_rows() > 0) {
  // afficher messages
} else {
  echo 'Aucun messages';
}

Posté : 30 août 2006, 16:58
par Invité
Merci, mais mysql_num_rows() ne m'est pas utile, puisque c'est une erreur lors de la requête.

SELECT a FROM b WHERE c=x

Si x n'est pas présent dans la colonne c, j'obtiens une erreur dans ma requête.

Donc pour éviter ça, je suis obligé de faire un COUNT préalable, ma question était de comment éviter cette prérequête.

Posté : 30 août 2006, 17:02
par iclo

Si x n'est pas présent dans la colonne c, j'obtiens une erreur dans ma requête.
Tu obtiens un résultat vide, pas une erreur. et donc mysql_num_rows() te reverra 0

Posté : 30 août 2006, 17:09
par Invité
Ben si, j'obtiens une erreur, sinon, je n'aurais pas posée cette question.

Posté : 30 août 2006, 17:28
par ouckileou
Ben si, j'obtiens une erreur, sinon, je n'aurais pas posée cette question.
Une requête à le droit de ne renvoyer aucun résultat.

Tu as posté 2 messages en parlant de cette erreur et il ne te viendrait pas à l'esprit de nous la donner par hasard ? :roll:

Posté : 30 août 2006, 17:29
par zeus
1/ affiche nous l'erreur

2/ je suis de l'avis de mes collègues, ton erreur doit venir d'un mysql_fetc_... après son exécution.
Un select qui ne retourne aucune ligne ne déclenche pas une erreur ... :roll: