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 :

Récupérer une "fourchette" de données


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut Récupérer une "fourchette" de données
    Salut à tous,

    Je cherche à récupérer une "fourchette" de données dans ma base.
    Exemple: Une base de données avec les données suivantes (Dans la pratique il s'agit d'une liste de tags qui se met à jours constamment.)

    [a, z, e, r, t, y, u, i, o, p, q, s, d, f, g, h, j, k, l, m, w, x, c, v, b, n]

    Se que je souhaite c'est, par exemple, rechercher "k" et récupérer

    [h, i, j, k, l, m, n]

    Et je n'est aucune idée comment faire! Ni même comment chercher sur internet une solution!

    Si quelqu'un à une piste!
    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Il faudrait donner la structure de votre table et le critère de classement des tags, nous dire aussi quel SGBD vous utilisez... bref, respecter les règles de ce forum !

  3. #3
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Pardon, sa manque en effet de précision!
    La BDD est MySQL.

    Quant à la structure de la table...
    Deux colonnes: id(int) et tag(varchar 255)

    Au bout du compte je ne cherche pas la requête SQL précise mais simplement une technique ou une piste. N'hésité pas pour la moindre idée.

    Merci.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pour faire ce que tu souhaites, il faut une notion d'ordre. Tu veux ordonner les tags par ordre alphabétique ou par id ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Les fonctions analytiques LEAD et LAG te seront utiles pour ce que tu veux faire mais je ne ais pas si elles sont implémentées dans MySQL (Peut-être sous un autre nom)

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Non , pas de fonction analytique chez MySQL

  7. #7
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Merci Scriuiw, ces fonctions SQL pourrait aller, mais elles ne sont pas compatible avec MySQL!

    J'ai cherché des équivalents mais sans résultat!
    Quelqu'un à peut être une autre solution?


    P.S: Je souhaite un tri sur les tags (alphabétique, peut importe le sens)

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Sans fonction analytique vous allez devoir passer par des requêtes corrélées.

    Si vous avez du volume ca risque d'être compliqué. (dans ce cas là prévoir une nouvelle colonne de classement et passer par un between tout bête, mais prévoir un batch pour / procédure pour gérer le raffraichissement de cette colonne)

    Dans l'idée donc ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select * 
    from tb1 c
    where (select count(*) from tb1 e where e.id < c.id) between 
    (  select (select count(*) from tb1 b where a.id > b.id) as rnk 
      from tb1 a
      where id = 'k') - 3 and 
    (  select (select count(*) from tb1 b where a.id > b.id) as rnk 
       from tb1 a
      where id = 'k') + 3

  9. #9
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Heu! punkoff... chapeau!
    C'est précisément ce que je souhaite!

    Pour le moment la table n'est pas énorme, donc ça ira !

    J'ai adapté ta requête, ajouté un petit "order by" sur le résultat et cela fonctionne parfaitement bien !

    Cependant, j'avoue que je ne comprends pas tout !
    En particulier la clause :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE (SELECT count(*) FROM tag_mot e WHERE e.terme < c.terme) BETWEEN ...
    Que fait ce "e.terme < c.terme"?

    En tout cas! Merci beaucoup pour cette technique!

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    En fait, vous avez plusieurs articles sur ce site qui expliquent ce genre de cas.

    je vous laisserai réfléchir à tout ca et faire des tests .. pas spécialement le temps d'y passer des heures dessus à expliquer (désolé).

    article sur MySql très succinct qui concerne votre besoin : http://mysql.developpez.com/telechar...aque-categorie

    article concernant les fonctions analytique, où vous pouvez aussi retrouver ce genre de contournement : http://sqlpro.developpez.com/article...clause-window/


    Et enfin les divisions relationnelles : http://sqlpro.developpez.com/cours/divrelationnelle/


    Les 2 derniers articles sont un peu pointus si votre niveau SQL est bas, mais intéressants.

    Le mieux est de décortiquer les requêtes posément avec des cas de test simple pour comprendre le fonctionnement (et amusez-vous avec les opérateurs <, >, = pour mieux cerner la chose)

  11. #11
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Excellent!

    Merci beaucoup.

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

Discussions similaires

  1. [XSLT] Récupérer une valeur pour un id donné
    Par capblans dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 23/04/2008, 09h26

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