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 :

difficulté de formuler une requete


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut difficulté de formuler une requete
    Bonjour
    j'ai dans une table Logiciels une colone nommée Version de type string et qui prend toujours la form X.Y.Z où X et Y et Z sont des nombres (par exemple '1.13.225')
    je veux dans une requete sql selectionner la plus récente version enregistrée. celle ci correspond a la valeur qui le plus grand X, s'il y en a plusieurs alors je prends celle qui a le plus grand Y et s'il y en a encore plusieurs, je prends celle avec le plus grand Y !

    mon probleme est que je n'arrive pas à formuler une bonne requete sql qui résume tout ca !
    merci pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut
    Salut,

    fais une requête dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM `Logiciels`
    ORDER BY `Logiciels`.`Version` ASC
    ;)

  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,

    la taille de ta chaine de caractère peut varier?

  4. #4
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    Salut,
    pour la suggestion de TekFanatiX ca ne marchera pas parce que selon ta requete 2.5.3 > 12.2.3 !!! parceque ce sont des chaines de caracteres.

    oui la chaine peut varier selon les valeus de X, Y et Z (par exemple X peut etre de 1 chiffre mais peut aussi etre de 2 chiffres...)

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Le plus simple serait de revoir la structure de ta table logiciel, et de rajouter 3 champs qui correspondrait chacun à X, Y ou Z en format number, et ta vie serait simplifiée. Enfin, si tu peux le faire !

  6. #6
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    c'est une bonne idée mais impossible de changer la structure de la table ! merci pour ton aide

  7. #7
    Scorpi0
    Invité(e)
    Par défaut
    J'aurais bien des idées qui pourrait marcher mais ça dépend de ton SGBD ^^

    Edit : allez, en Oracle, ça donnerait la boucherie suivante :

    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
    with Logiciels as
    (
     select '1.13.225' as version from dual
     union all select '1.13.226' as version from dual
     union all select '0.13.225' as version from dual
     union all select '1.12.225' as version from dual
    )
    SELECT --* from
    DISTINCT max(Version) over (ORDER BY X desc,Y desc,Z desc) FROM
    (
      SELECT to_number(substr(Version ,1,instr(Version ,'.')-1)) AS X,
             to_number(substr(substr(substr(Version,instr(Version,'.')),2),1,instr(substr(substr(Version,instr(Version,'.')),2),'.')-1)) AS Y, 
             to_number(substr(substr(substr(substr(Version,instr(Version,'.')),2),instr(substr(substr(Version,instr(Version,'.')),2),'.')),2)) AS Z,
    Version
      FROM Logiciels 
    )
    Résultat :

    Dernière modification par Scorpi0 ; 02/12/2008 à 18h12.

  8. #8
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    merci bien mais je travaille avec mysql

  9. #9
    Scorpi0
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Version from
    (
      SELECT cast(substr(Version ,1,instr(Version ,'.')-1) as int) AS X,
             cast(substr(substr(substr(Version,instr(Version,'.')),2),1,instr(substr(substr(Version,instr(Version,'.')),2),'.')-1) as int) AS Y, 
             cast(substr(substr(substr(substr(Version,instr(Version,'.')),2),instr(substr(substr(Version,instr(Version,'.')),2),'.')),2) as int) AS Z,
    Version
      FROM Logiciels 
    )
    ORDER BY X DESC,Y DESC,Z DESC
    limit 1
    Je suis pas un expert MySQL, mais instr et substr fonctionne pareil qu'en Oracle, j'ai modifier le to_number() en cast ( as int) et utiliser le LIMIT au lieu de la fonction analytique d'Oracle.


    Edit : un forum existe pour le MySQL !!
    http://www.developpez.net/forums/f98...ysql/requetes/
    Dernière modification par Scorpi0 ; 02/12/2008 à 19h00.

  10. #10
    Membre régulier Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Points : 121
    Points
    121
    Par défaut
    la requete contient dse erreurs de syntaxe mais l'idée m'est maintenant tres claire !!!
    et je te remercie bien pour ton aide
    cordialement subzero

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

Discussions similaires

  1. Difficulté pour réaliser une requete peu complexe :/
    Par DanaX dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/05/2007, 14h55
  2. Réponses: 13
    Dernier message: 21/04/2006, 16h39
  3. Comment formuler une requête alter table ?
    Par cjo dans le forum Paradox
    Réponses: 2
    Dernier message: 29/12/2005, 04h11
  4. difficulté pr ecrire une requete
    Par peppena dans le forum Langage SQL
    Réponses: 7
    Dernier message: 01/11/2005, 14h01
  5. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 11h56

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