Champs inconnu sur having

ayayaaa
Invité n'ayant pas de compte PHPfrance

20 mars 2005, 20:37

Bonjour,

je suis en train de faire un forum.
j'ai 2 tables : sujet et réponse.

Je veux afficher sur une page tous les sujets avec le nombre de réponse pour chaque sujet.
Sachant que je ne dois comptabiliser que les réponses acceptés par le modérateur.

Voilà ma requête :

Code : Tout sélectionner

$requete_message = "SELECT s.auteur AS auteur, s.titre AS titre, s.IDsujet AS IDsujet, count(*) AS nb_reponse "; $requete_message .= "FROM euralp_sujet s LEFT JOIN euralp_reponse r on (s.IDsujet=r.IDsujet) "; $requete_message .= "WHERE s.valide=1 "; $requete_message .= "GROUP BY s.IDsujet "; $requete_message .= "HAVING r.valide=1 "; $requete_message .= "ORDER BY s.date_maj DESC LIMIT $debut,$nb_enregistrement";
il y a un erreur sur le having. Il me dit que r.valide est un champs inconnu.
Quelqu'un aurait il une idée.

Merci par avance pour vos réponses

Ayayaaa

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 mars 2005, 09:50

Moi aussi je te dirais la même erreur si j'étais MYSQL, regarde bien ta requête au niveau du where et du group by :
WHERE s.valide=1 ";
$requete_message .= "GROUP BY s.IDsujet ";
$requete_message .= "HAVING r.valide=1


Alors la question est : le champ valide se trouve où dans r (la table réponse) ou s (la table sujet) ???
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ayayaaa
Invité n'ayant pas de compte PHPfrance

21 mars 2005, 13:35

Salut,

Merci pour la réponse.

En fait j'ai :
- un champs valide dans la table sujet pour savoir si le sujet a été validé par le modérateur
- et un champs valide dans la table reponse pour savoir si la réponse a été validé par le modérateur.

le where est la pour sélectionné les sujets validés et le having est là pour compter le nombre de réponse validé par sujet.
Mais peut être existe t'il une autre syntaxe pour calculer le nombre de réponse validé.

Quelqu'un aurait une autre idée

Merci par avance

Yannick

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

21 mars 2005, 14:30

SELECT s.auteur AS auteur, s.titre AS titre, s.IDsujet AS IDsujet, count(*) AS nb_reponse
FROM euralp_sujet s INNER JOIN euralp_reponse r on (s.IDsujet=r.IDsujet)
WHERE s.valide=1
GROUP BY s.auteur , s.titre, s.IDsujet
HAVING r.valide=1
ORDER BY s.date_maj DESC
LIMIT $debut,$nb_enregistrement

Ta requête fait bien le comptage et t'as pas besoin d'autres méthodes.
Sauf qu'il faut utiliser un INNER JOIN (jointure naturelle = intersection)
et dans le GROUP BY il faut rappeler les champs du SELECT (dans l'ordre de tri vollu)

Ramarque les variables $debut et $nb_enregistrement doivent avoir des valeurs correctes avant l'exécution de la requête.
Modifié en dernier par sadeq le 22 mars 2005, 09:35, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 13 Messages

21 mars 2005, 17:39

J'ai essayé ce que tu me dis sans plus de résultat.

Merci quand même

Ayayaaa

Eléphanteau du PHP | 13 Messages

21 mars 2005, 19:45

Ca y est j'ai trouvé une feinte.

Je sais pas si c'est ce qu'il y a de plus propre mais ca marche

voilà le résultat :

Code : Tout sélectionner

$requete_message = "SELECT s.auteur AS auteur, s.titre AS titre, s.IDsujet AS IDsujet, sum(r.valide) AS nb_reponse "; $requete_message .= "FROM euralp_sujet s LEFT JOIN euralp_reponse r on (s.IDsujet=r.IDsujet) "; $requete_message .= "WHERE s.valide=1 "; $requete_message .= "GROUP BY s.IDsujet, s.titre, s.auteur "; $requete_message .= "ORDER BY s.date_maj DESC LIMIT $debut,$nb_enregistrement";
Merci quand même

AYAYAAA