IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

trier cat en fonction du nombre d'entrée tout en affichant son nom ?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut trier cat en fonction du nombre d'entrée tout en affichant son nom ?
    Bonjour,

    J'ai modifier la structure de ma bd et plus rien ne marche

    Voila ma nouvelle requete pour appeler mes catégories :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT affiche_online.categorie_id, categorie.categorie_nom  count(categorie_id) AS NB_total  
    FROM affiche_online,categorie 
    WHERE categorie.categorie_id = affiche_online.categorie_id 
    GROUP BY categorie_id 
    ORDER BY NB_total DESC
    j'ai ajouté WHERE pour afficher le nom de la catégorie en fonction de son id mais je débute

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    Bonjour,

    Sans structure de base de donnée ni erreur c'est difficile de t'aider.
    Peut-tu nous en dire plus ?

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    comme le dit kazou, sans message d'erreur il est difficile de t'aider.
    Bon on va deja réécrire la requete d'une facon plus normalisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT affiche_online.categorie_id, categorie.categorie_nom, count(categorie_id) AS NB_total  
    FROM affiche_online JOIN categorie 
    ON categorie.categorie_id = affiche_online.categorie_id 
    GROUP BY affiche.onlinecategorie_id,categorie.categorie_nom 
    ORDER BY NB_total DESC

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    Salut,

    J'ai légèrement modifié la solution de Cybher et sa marche parfaitement
    je pense que je devrais surtout mieux étudier le SQL

    voilà la solution qui marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT affiche_online.categorie_id, categorie.categorie_nom, count(affiche_online.categorie_id) AS NB_total  FROM affiche_online JOIN categorie ON categorie.categorie_id = affiche_online.categorie_id GROUP BY affiche_online.categorie_id,categorie.categorie_nom ORDER BY NB_total DESC
    juste une dernière question le ON remplace WHERE ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    je pense que l'erreur vient surtout du fait que j'ai oublié categorie.categorie_nom dans GROUP BY ensuite le reste n'est qu'une question d'optimisation ?

  6. #6
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    il y a plusieurs facon de lier les tables lors de la requete.

    Il faut bien connaitre déja la facon dont le SGBD fonctionne pour la méthode de jointure utilisé.
    Tout d'abord le FROM, lorsqu'on spécifie 2, 3, 4 champs, ce dernier retourne toutes les combinaisons possibles entre ces n tables, c'est ce que l'on apelle un produit cartésien.
    Ensuite le WHERE reduit les combinaisons possible aux combinaisons qui ont une sens. il laisse donc juste les tuples qui ont besoin d'être liées.

    Les clauses join servent a obtenir le même résultat mais pas de la même facon.
    Un WHERE peut êter donc utilisé pour daire des jointures (déconseillé), ou affiner un résultat.
    Le SGBD ne connait donc pas le but du WHERE, il ne connait pas l'envergure des donnée qu'il doit traiter.

    Avec un join il sais qu'il doit lier des données, il sais qu'il doit donc traiter pas mal d'informations et enlever beaucoup des occurences, et de ce fait, applique beaucoup d'optiminisations dans le traitement de la requête.

    Il est donc conseillé, de ne pas utiliser tout et nimporte quoi pour faire n'importe quoi. Utilisons un join pour faire des jointures, et un WHERE pour le reste

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 240
    Points : 81
    Points
    81
    Par défaut
    Ok je comprend mieux maintenant, je vais donc appliquer sa à l'ensemble de mon site

    Un grand merci pour tout ces infos

  8. #8
    say
    say est déconnecté
    Membre éprouvé
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 258
    Points
    1 258
    Par défaut
    !!!!!! please!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Turbo Pascal] La fonction random : nombre compris entre 1 (pas 0) et 100
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 24/12/2012, 12h55
  2. Réponses: 3
    Dernier message: 23/12/2009, 20h11
  3. Réponses: 7
    Dernier message: 19/09/2009, 00h05
  4. Réponses: 3
    Dernier message: 11/08/2009, 11h39
  5. Réponses: 6
    Dernier message: 20/07/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo