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

PHP & Base de données Discussion :

ORDER BY FIELD et sous requete [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut ORDER BY FIELD et sous requete
    Bonjour,

    J'ai besoin de faire un order by field
    En dur pas de souci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY FIELD(p.idline_prod, 4,6,5)
    Ma problématique commence lorsque l'ordre est stocké dans un champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY FIELD(p.idline_prod, (select h.comp_sort from compilheaders as h where h.comp_id=".$compilID."))
    Y'a moyen de faire un truc de ce genre là ?

    En attendant je fais une requete préalable pour concatener ensuite la requete principale, j'aurais voulu n'en faire qu'une ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut 4select FIELD(7, (SELECT GROUP_CONCAT(DISTINCT `t_serial`.`id_groupe`) FROM `t_serial`))4
    Salut,

    je n'ai pas testé mais j'aurais fait un essai avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY FIELD(p.idline_prod, (SELECT GROUP_CONCAT(h.comp_sort) FROM compilheaders AS h WHERE h.comp_id=".$compilID." ORDER BY h.comp_sort))

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Merci de te pencher sur mon souci
    Dis moi si je me trompe, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(h.comp_sort)
    imposerai que je les id de order soient chacun dans un enregistrement , or là mon champs comp_sort contient dans une seul chaine de caractère la suite :
    "4,6,5,7"

    La problématique est de transformer cette chaine de caractère en une suite d'arguments pour la fonction ORDER BY FIELD
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Tu peux quand même essayer avec un where restrictif de manière à ce que le GROUP_CONCAT() ne renvoie que la valeur de ton champ contenant tes données de critère.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    En fait pour gérer une ordination des lignes du panier je me pose la question entre deux possibilités

    J'ai pour la gestion de ces paniers deux tables
    une table des entêtes
    une table des lignes

    Solution un:
    Rajouter un champs order au niveau de la table des lignes
    Avantage: le tri est direct dans la requete avec un order by ce champs
    Désavantage: la mise a jour suite à une modif d'ordre ou suppression de ligne suppose de boucler sur toutes les lignes pour réattribuer le champs

    Solution Deux:
    Rajouter un champs order dans le header dans lequel on stocke une chaine
    de la suite ordonnée des ids avec séparateur ( "5,7,12,6,3")
    Avantage: la maise a jour de l'ordination se fait en une seule requete
    Désavantage: Je suis obligé de faire une requete préliminaire afin de pouvoir concaténer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by field 'id, [suite en arguments])

    Existe-t-il plus simple ? (je voudrais m'eviter de réinventer l'eau tiède )
    Sinon, laquelle de ces deux possibilité récolte votre faveur et pourquoi ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    J'opterai pour la 1ère solution.
    Trois raisons :
    - L'ordonnancement se fait sur un champ numérique de petite taille (je doute que le panier fasse des milliers de lignes) -> petit lait pour le moteur
    - A la suppression, il n'y a pas d'obligation de réordonner l'index. Il peut très bien y avoir un trou. Cela ne pose pas de problème pour les tris.
    Et il est possible de gérer le n° de place par le PHP sans s'occuper de celui de la base du moment que les requêtes renvoient le bon ordre.
    - Au changement d'ordre, les mises à jours se font très rapidement sur un champ entier.

    La deuxième solution, ça relève plus du bricolage à mes yeux.
    Concaténer des string, faire des recherches dans chaînes ou sous-chaines avec un moteur de base de données n'est pas très à propos d'autant plus qu'on parle d'ordonnancement !

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    bon en fait j'opte pour la seconde, mais parce que en fouillant l'aide MYSQL sur FIELD() j'ai trouvé une autre fonction FIND_IN_SET() qui prend en second argument une chaine string avec délimiteur ,
    Du coup je peux faire la sous requête pour me retourner la string d’ordonnancement de la table d'entêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY FIND_IN_SET(p.idline_prod, (select h.comp_sort from compilheaders as h where h.comp_id=".$compilID."))"
    Donc plus de désavantage !!

    merci pour ton implication et désolé de ne pas suivre ton conseil, mais j'y trouve plus mon compte en fonction de mon ergonomie avec la suite en string.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. lenteur à cause d'un order by indexé dans une sous requete
    Par gianni7033 dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/11/2010, 23h25
  2. ORDER BY et sous requete
    Par wess34 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/07/2006, 17h31
  3. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02
  4. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18
  5. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54

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