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 :

selection dernier id par sous categorie


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut selection dernier id par sous categorie
    Bonjour à tous, je me retrouve confronté à un petit souçi et je tente de le résoudre avec une requête adapté.
    Je cherche à sélectionner les derniers enregistrements de chaque sous catégorie, donc en gros l'identifiant le plus récent de chaque sous categorie.
    Ensuite dans une autre requête faire la même chose mais avec selectionner le dernier enregistrement de chaque catégorie.
    Pour le moment ma requête est construite comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT client.id, client.urlc, client.imgc, client.titlec, client.descc,
      s.sub_cat_libelle, c.cat_libelle, s.sub_cat_id 
    FROM db_plugins_client as client 
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id 
    LEFT JOIN db_plugins_client_subcat s on client.sub_cat_id = s.sub_cat_id
    • Sachant que l'identifiant de chaque sous catégorie est sub_cat_id
    • L'identifiant de chaque enregistrement client est id

    En gros : Selectionner le dernier "client.id" dans chaque "s.sub_cat_libelle" et faire idem avec c.cat_libelle

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je suppose que les id sont des entiers auto-incrémentés alors on peut faire pour les sous-catégories :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT s.sub_cat_libelle, MAX(client.id) AS DernierClient
    FROM db_plugins_client AS client 
    LEFT JOIN db_plugins_client_subcat s ON client.sub_cat_id = s.sub_cat_id
    GROUP BY s.sub_cat_libelle
    A adapter pour les catégories.

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    j'ai tester mais il y a un souçi il ne m'affiche pas la derniere image ??

    Que ce soit pour la catégorie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT c.cat_libelle, MAX( client.id ) AS DernierClient, client.imgc, client.urlc, s.sub_cat_libelle
    FROM db_plugins_client AS client
    LEFT JOIN db_plugins_client_cat c ON ( client.cat_id = c.cat_id )
    LEFT JOIN db_plugins_client_subcat s ON ( client.sub_cat_id = s.sub_cat_id )
    WHERE c.cat_libelle = "sante"
    GROUP BY c.cat_libelle
    Ou la sous catégorie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT s.sub_cat_libelle, MAX( client.id ) AS DernierClient, client.imgc, s.sub_cat_libelle
    FROM db_plugins_client AS client
    LEFT JOIN db_plugins_client_subcat s ON ( client.sub_cat_id = s.sub_cat_id )
    LEFT JOIN db_plugins_client_cat c ON ( c.cat_id = s.cat_id )
    WHERE c.cat_libelle = "sante"
    AND s.sub_cat_libelle = "esthetique"
    GROUP BY s.sub_cat_libelle
    Pour la deuxième requête il me retourne ceci :
    esthetique 9 produits-cosmetiques.jpg
    Hors le dernier client (id =9) retourne l'image du 8 ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    La requete que t'a donnée Cinephil est à joindre avec le reste.
    Cette sous-requete te donnera l'ID client max pour chaque catégorie, en utilisant un JOIN tu ne conserveras que ce client pour chaque categorie.
    Ca doit donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    SELECT 
          client.id,
          client.urlc,
          client.imgc,
          client.titlec,
          client.descc,
          s.sub_cat_libelle,
          c.cat_libelle,
          s.sub_cat_id 
    FROM db_plugins_client client 
    JOIN 
         (
          SELECT max(client.id) id, c.cat_libelle
          FROM db_plugins_client client
          LEFT JOIN db_plugins_client_cat c 
          GROUP BY c.cat_libelle
         ) client_id_max
         ON ( client.id = client_id_max.id ) 
    LEFT JOIN db_plugins_client_cat c
         ON client.cat_id = c.cat_id
    LEFT JOIN db_plugins_client_subcat s
         ON ( client.sub_cat_id = s.sub_cat_id)

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    je viens d'essayer votre requête pour voir un aperçu du résultat mais il me retourne
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY c.cat_libelle ) client_id_max ON ( client.id = client_id_max.id ) L' at line 8

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Ah, j'ai oublié la condition de jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT 
          client.id,
          client.urlc,
          client.imgc,
          client.titlec,
          client.descc,
          s.sub_cat_libelle,
          c.cat_libelle,
          s.sub_cat_id 
    FROM db_plugins_client client 
    JOIN 
         (
          SELECT max(client.id) id, c.cat_libelle
          FROM db_plugins_client client
          LEFT JOIN db_plugins_client_cat c 
               ON client.cat_id = c.cat_id
          GROUP BY c.cat_libelle
         ) client_id_max
         ON ( client.id = client_id_max.id ) 
    LEFT JOIN db_plugins_client_cat c
         ON client.cat_id = c.cat_id
    LEFT JOIN db_plugins_client_subcat s
         ON ( client.sub_cat_id = s.sub_cat_id)

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    merci, je viens de tester, c'est vraiment bien.
    Je cherche à sélectionner chaque dernière image dans une sous categorie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT client.id, client.urlc, client.imgc, client.titlec, client.descc, s.sub_cat_libelle, c.cat_libelle, s.sub_cat_id
    FROM db_plugins_client client
    JOIN (
    SELECT max( client.id ) id, c.cat_libelle
    FROM db_plugins_client client
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id
    GROUP BY c.cat_libelle
    )client_id_max ON ( client.id = client_id_max.id )
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id
    LEFT JOIN db_plugins_client_subcat s ON ( client.sub_cat_id = s.sub_cat_id )
    Il me retourne chaque dernière images de toutes les catégories, comment avoir chaque dernière images de toutes les sous catégories d'une catégorie bien définie ??
    J'ai essayer en passant simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT client.id, client.urlc, client.imgc, client.titlec, client.descc, s.sub_cat_libelle, c.cat_libelle, s.sub_cat_id
    FROM db_plugins_client client
    JOIN (
    SELECT max( client.id ) id, c.cat_libelle
    FROM db_plugins_client client
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id
    GROUP BY c.cat_libelle
    )client_id_max ON ( client.id = client_id_max.id )
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id
    LEFT JOIN db_plugins_client_subcat s ON ( client.sub_cat_id = s.sub_cat_id ) where c.cat_libelle = "sante"
    En principe je cherche à retourné la dernière image comprise dans par exemple deux sous catégories appartenant à "santé" donc:
    • "esthetique"
    • "chirurgie"
      Chacune contient plusieurs enregistrements mais seul le dernier doit être retourné

    • - esthetique -> image 1
    • - chirurgie ->image 1

    Une idée

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Dans ce cas, c'est par sous catégorie qu'il va falloir rechercher l'id client max.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT client.id, client.urlc, client.imgc, client.titlec, client.descc, s.sub_cat_libelle, c.cat_libelle, s.sub_cat_id
    FROM db_plugins_client client
    JOIN (
    SELECT max( client.id ) id, s.sub_cat_id
    FROM db_plugins_client client
    LEFT JOIN db_plugins_client_subcat s ON client.sub_cat_id = s.sub_cat_id
    GROUP BY s.sub_cat_id
    ) client_id_max ON ( client.id = client_id_max.id )
    LEFT JOIN db_plugins_client_cat c ON client.cat_id = c.cat_id
    LEFT JOIN db_plugins_client_subcat s ON ( client.sub_cat_id = s.sub_cat_id )
    WHERE c.cat_libelle = "sante"

  9. #9
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    ahh super merci c'est exactement ce que je cherchais, je n'avais jamais fais ce genre de jointure

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

Discussions similaires

  1. select categorie et sous categorie en une requete
    Par calitom dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2010, 17h11
  2. Réponses: 3
    Dernier message: 03/02/2009, 11h51
  3. [CSS]SELECT dernier caractère caché par la flèche
    Par lodan dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 08/11/2006, 16h37
  4. [HTML][Select]désactiver une option sous IE ?
    Par tiPouick dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/11/2004, 13h13
  5. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 18h00

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