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 :

Tri par rapport à une liste de clés primaires


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut Tri par rapport à une liste de clés primaires
    Bonjour,

    Sur un site web, j'ai dans une variable toutes les clés primaires d'une série d'articles. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_products=101;85;46;205
    Dans mon SQL, pour afficher ces articles, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL="SELECT * FROM t_products WHERE pro_no IN ("& v_products &")"
    Il sélectionne donc tous les produits, cela fonctionne parfaitement.

    Par contre, je désire que ces articles s'affichent dans l'ordre de ma variable. C'est à dire d'abord (par rapport à l'exemple) l'article 101, puis le 85, puis le 46, puis le 205, etc. Car par défaut, il me trie ça par ordre croissant de clé primaire.

    Est-ce possible ? Je ne vois pas trop comment faire...

    Merci d'avance !

  2. #2
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Salut,
    Faut voir, peut-être qu'un ORDER BY pourrait t'aider, mais cela dépend. Déjà, as-tu d'autres champs dans ta base. Et comment obtiens l'ordre de tes clés primaires ?
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  3. #3
    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 803
    Points
    30 803
    Par défaut
    Il faut que le moteur SQL puisse se baser sur une valeur ordonnée pour effectuer son tri dans l'ordre où tu le souhaites.
    Donc il faut bien que, quelque part dans ta base de données, il soit enregistré que les identifiants 101;85;46;205 doivent être affichés dans cet ordre, et pas un autre.
    D'ailleurs, peux-tu nous expliquer pourquoi ces valeurs doivent apparaître dans cet ordre là ?
    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.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    J'utilise ce système pour un caddie.
    J'aurais voulu que lorsqu'un client ajoute un article dans son panier, celui-ci vienne à la fin.
    Pour garder les infos en mémoire, je mets tout ça dans une variable et j'ajoute à la fin la clé primaire de l'article.

  5. #5
    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 803
    Points
    30 803
    Par défaut
    Le plus pratique serait que tu ajoutes ton identifiant dans une table de travail de structure Panier(Client, Pro_No, Ordre).
    Ensuite c'est simple de faire une jointure avec les produits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "SELECT t_products.* 
    FROM t_products 
      INNER JOIN Panier
      ON Panier.Pro_No = t_products.Pro_No
    WHERE Panier.Client = " & v_Client & "
    ORDER BY Panier.Ordre"
    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.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Le fait est que je ne peux pas travailler dans la base. Je peux simplement ajouter les infos dans une variable en Request.QueryString (dans la barre d'adresse).
    Est-ce que je pourrais par exemple créer une seconde variable v_order qui contiendrait l'ordre de chaque article et trier v_products par ordre croissant ?
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v_products="88;89;100;110;150"
    v_order="4;2;1;5;3"
    En tournant dans un tableau, j'arriverai à récupérer l'ordre.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Mais au pire, plutôt que de m'embêter à tout recoder, j'aimerais savoir si c'est vraiment impossible de faire un tri sur les valeurs que je donne comme dit dans mon premier message.

  8. #8
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Les valeurs de ta liste "IN" ne sont pas triables ainsi, et le "ORDER BY" du SQL doit se baser sur un champ de ton SELECT.

    En fait, ton souci n'est pas relatif au SQL, mais bien à la manière dont tu gères ton programme : Le SQL va lire des infos contenues dans la base, donc si le contenu de ton caddie n'est pas géré dans la BDD, tu ne pourras pas les trier via SQL. C'est donc à ton programme de gérer le tri (avec un tableau, comme tu le proposes justement).
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Ok, merci. C'est bien ce que je pensais

    Merci bien en tout cas !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par al1_24
    Le plus pratique serait que tu ajoutes ton identifiant dans une table de travail de structure Panier(Client, Pro_No, Ordre).
    Ensuite c'est simple de faire une jointure avec les produits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "SELECT t_products.* 
    FROM t_products 
      INNER JOIN Panier
      ON Panier.Pro_No = t_products.Pro_No
    WHERE Panier.Client = " & v_Client & "
    ORDER BY Panier.Ordre"
    C'est une pratique courante pour les e-commerces de créer un enregistrement provisoire ?

  11. #11
    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 803
    Points
    30 803
    Par défaut
    Citation Envoyé par yoyot
    C'est une pratique courante pour les e-commerces de créer un enregistrement provisoire ?
    Je ne sais pas, je n'ai jamais fait...
    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.

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

Discussions similaires

  1. tri par selection d'une liste chainée
    Par abdelghani666 dans le forum Débuter
    Réponses: 0
    Dernier message: 18/02/2012, 16h58
  2. Tri par insertion sur une liste chainé simple.
    Par loula427 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/03/2011, 14h54
  3. Réponses: 3
    Dernier message: 15/02/2010, 13h28
  4. Comparer valeur par rapport a une liste
    Par mick_ban dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2008, 10h20
  5. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34

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