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 :

appliquer le "limit" sur un seul champ d'un résultat


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut appliquer le "limit" sur un seul champ d'un résultat
    Bonjour,

    je suis toujours sur la même requête que dans mon post précédent.

    J'ai 3 tables. Des logiciels peuvent être installés à bord de véhicules, et chaque véhicule a une version donnée d'un logiciel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    VEHICULE  1 <------> 0..* VERSION 0..* <--------> 1 LOGICIEL
       id                         id                   id
      numero                    numero                 nom
    J'ai une requête qui me retourne l'ensemble des véhicules ordonnés selon leur numéro de version pour un nom de logiciel donné. Exemple de retour (classé par version.numero décroissant pour le logiciel.nom == "nomLogiciel2") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    numeroVehicule - logiciel.nom - version.numero
    50002 - nomLogiciel2 - 5.5
    50001 - nomLogiciel2 - 5.4
    50003 - nomLogiciel2 - 5.1
    50001 - nomLogiciel1 - 2.0
    50002 - nomLogiciel1 - 2.1
    50003 - nomLogiciel1 - 2.0
    Le nouveau problème que j'ai est que je voudrais pouvoir ne récupérer que les n premiers véhicules (disons n=2 dans mon exemple). Mais si j'utilise un "LIMIT 2", je n'obtiendrai que les deux premières lignes de mon résultat, alors que j'aurais voulu également les autres lignes concernant le même véhicule (c'est-à-dire les lignes 4 et 5).

    Existe-t-il un moyen de faire porter le LIMIT uniquement sur un des champs retournés? Ou une bidouille quelconque pour arriver au même résultat...?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    Pourrais-tu nous donner la requête que tu veux faire évoluer ?
    Ce serait certainement plus simple pour t'aider.

    En nous précisant le SGBD que tu utilises et sa version, cela permettrait de te donner des réponses que tu pourras mettre en oeuvre et non réver en pensant à tout ce que tu pourrais faire de manière plus simple si tu utilisais un autre outil
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    la requête serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT v.numero, l.nom, version.numero
    FROM vehicule v
    LEFT JOIN version ON version.id_vehicule=v.id
    LEFT JOIN logiciel l ON version.id_logiciel=l.id
    ORDER BY
        CASE l.nom WHEN 'nomLogiciel2' THEN 0 ELSE 1 END ASC,
         version.numero DESC
    J'utilise mysql mais en passant via java/hibernate, je ne peux pas avoir de solution dépendante du SGBD....

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 763
    Points
    30 763
    Par défaut
    je ne peux pas avoir de solution dépendante du SGBD
    En utilisant LIMIT, tu auras une solution dépendante du SGBD puisque cette clause n'est pas conforme à la norme ANSI-SQL.

    Si tu cherches une syntaxe compréhensible par tous les SGBD, tu devras t'en tenir aux spécifications SQL-89 qui sont relativement limitées en fonctionnalités.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Ah bon, je pensais que LIMIT était une fonctionnalité de base...

    Tant pis alors, je laisserai le tri s'effectuer en mémoire après le chargement de la totalité des données....

    Merci pour ton aide!

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2009, 19h20

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