Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/08/2011, 23h00   #1
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 7
Points : 2
Points : 2
Par défaut Croisement très tordu de select(distinct), count, where, etc.

Bonjour à tous !
J'ai besoin de votre aide pour le codage d'une page : je suis entrain de coder un forum en php et sql, les messages s'enregistrent automatiquement dans une bdd dont les coordonnées se trouvent dans 2 champs numériques (en plus du id): un nommé "famille", qui permet de regrouper tous les messages d'une même conversation : chaque fois qu'on répond à un message, le nombre qui s'inscrit dans le champ "famille" est automatiquement le même que le précédent. L'autre se nomme "no", un numéro unique qui part de 0 pour le message racine de chaque conversation s'enregistre pour spécifier le "niveau" du message.

Je souhaiterais créer une page grâce à laquelle on aurait accès à tous les messages sans réponse, avec idéalement une indication sur le nombre de messages trouvés, en tout cas un texte à afficher s'il n'y a aucun message sans réponse, plutôt qu'une page vide. Il faudrait donc prendre tous les DISTINCT(famille) et compter le nombre d'enregistrements dans chacun de ces numéros de famille distincts pour n'en garder que ceux dont le COUNT serait égal à 1. Mais je n'ai aucune idée sur comment créer une telle requête sans croiser tous ces paramètres (WHERE, DISTINCT, COUNT, etc.) n'importe comment. Ainsi, je pourrais prévoir un texte à afficher si le COUNT indique 0: Aucune message sans réponse.

Si quelqu'un a une idée, ce serait très sympa.
Merci d'avance pour vos réponses !
mike12z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2011, 23h18   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 019
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 019
Points : 18 304
Points : 18 304
Envoyer un message via MSN à CinePhil
Avec COUNT, GROUP BY et HAVING, et un peu de lecture des cours de SQLPro, tu devrais t'en sortir.
Reviens nous voir avec un début de requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 00h09   #3
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 7
Points : 2
Points : 2
Waou ! Merci pour ton lien, il a l'air très très intéressant ! Je vais voir un peu tout ça et je te dis. Le problème est que j'arrivais à un résultat qui me paraissait très absurde : d'abord je cherchais dans le WHERE DISTINCT qui ne veut rien dire, ensuite quelque chose du type
SELECT COUNT(*) AS nombre FROM messages GROUP BY famille HAVING COUNT(*) = 1

mais il me semble pas que ça n'ait forcément plus de sens.
Je vais étudier un peu tout ça.
mike12z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2011, 01h23   #4
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Suisse

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 7
Points : 2
Points : 2
AAAAAAAAH MAIS NOOON !!!
Pardon, je vous ai dérangé pour rien... au fait ma fonction marchait très bien, suis-je bête... j'avais fait une faute dans la récupération des données, du coup je croyais que c'était ma requête qui était trop tordue !
Comme un abruti, j'avais utilisé après le fetch un
if ($requête['nombre']=="0"), avec un 0 entre guillemets, sans réfléchir, et le else plus loin où il devait donner le nombre de trouvé, donc du coup il ne m'affichait rien.


Voilà voilà.
Mais celà dit, merci CinePhil pour ton lien, visiblement ce petit détour n'est pas perdu pour moi vu que j'ai découvert un super site de référence !
mike12z est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h51.


 
 
 
 
Partenaires

Hébergement Web