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

SQL Procédural MySQL Discussion :

Simulation d'une liste/tableau pour itération


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut Simulation d'une liste/tableau pour itération
    Bonjour,

    Je voudrais savoir s'il y a un moyen simple de simuler une liste (tableau, array) comme argument d'une fonction ou d'une procédure, dans l'idée de ne faire qu'une seule fonction/procédure pour répondre à mes besoins, et côté serveur SQL pour soulager l'applicatif...

    Un petit exemple que je reprends d'un récent sujet que j'ai lançé :
    Soient 3 tables :
    element_name (id int, name varchar)
    single (id int, name varchar)
    assemblage (id int, element_name_id int, single_id int) avec element_name_id et single_id des clés étrangères sur les id respectivement des tables element_name et single.

    Exemple d'element_name : skateboard, voiture, moto, velo
    Exemple de single : guidon, volant, roue, frein, porte

    Je vais avoir comme "assemblage"s :
    skateboard/roue
    velo/roue
    velo/frein
    velo/guidon
    moto/roue
    moto/frein
    moto/guidon
    voiture/roue
    voiture/frein
    voiture/volant
    voiture/porte

    Je voudrais ajouter de nouveaux assemblages avec des elements deja existant.
    J'aimerais une procedure que j'appelerais de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    call create_assemblage('bus','roue','frein','volant','porte')
    call create_assemblage('roller','roue','frein')
    le premier argument serait l'element a creer et les autres sont les single à inserer dans assemblage avec ce nouvel element.

    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # inserer le nouvel element
    insert into element_name (name) values ('bus')
    # recuperer son id
    select id from element_name where name='bus'
     
    # premier couple de l'assemblage
    select id2 from single where name='roue' ;
    insert into assemblage (element_name_id, single_id) values (id, id2)
     
    # second couple de l'assemblage
    select id2 from single where name='frein' ;
    insert into assemblage (element_name_id, single_id) values (id, id2)
     
    etc...
    et ceci dans une boucle pour le faire autant de fois que d'éléments en argument...
    ou bien, imaginer de concatener les elements dans le deuxième argument mais il faut trouver un moyen d'itérer sur ces arguments dans la fonction/procedure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    call create_assemblage('bus','roue,frein,volant,porte')
    call create_assemblage('roller','roue,frein')
    Merci pour vos avis !

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    oui tu concatène tes résultats avec 1 ou plusieurs séparateurs (1 ou plusieurs caractères) en une chaine de caractère ou tu les concatène de manière plus hiérarchique en xml (plutôt pour une utilisation externe à mysql ensuite)

  3. #3
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,

    oui tu concatène tes résultats avec 1 ou plusieurs séparateurs (1 ou plusieurs caractères) en une chaine de caractère ou tu les concatène de manière plus hiérarchique en xml (plutôt pour une utilisation externe à mysql ensuite)
    Merci pour ta réponse mais je ne comprends pas tout...
    De quels résultats parles-tu ?
    Pour l'instant, je n'ai pas de résultats mais juste des arguments à passer.
    Je connais la fonction CONCAT par contre je n'ai pas vu de SPLIT...comment découper ensuite la concaténation ?

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    coté php par exemple

  5. #5
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    peut etre que ce lien peut vous aider

    Bon courage

  6. #6
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    coté php par exemple
    Ah non, je voulais rester uniquement en procédural, sinon en effet je fais tout en Perl et là plus de problème...

    Citation Envoyé par Yanika_bzh Voir le message
    peut etre que ce lien peut vous aider
    Merci pour le lien, oui en effet ce serait une solution...
    Mais c'est dingue tout de même qu'il y ait des fonctionnalités de ce type, si complexes, alors qu'il n'y a pas un simple "split(str, delim)" sur lequel on pourrait itérer !!!
    Par ce que avec cette solution XML, il faudrait que mon appel de procédure soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call create_assemblage('bus','<a>roue</a><a>frein</a><a>volant</a><a>porte</a>')
    au lieu d'un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call create_assemblage('bus','roue|frein|volant|porte')

  7. #7
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    je pense que ça vient du fait que mysql permet de convertir automatiquement les résultats renvoyés en xml plutôt que normalement...



    enfin ça date quand même seulement de la version 5.1.5

Discussions similaires

  1. crée une liste déroulante pour une requete
    Par gastoncs dans le forum Access
    Réponses: 14
    Dernier message: 10/06/2008, 12h48
  2. Créer une liste déroulante pour un attribut booléen?
    Par Flackou dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 29/05/2008, 09h35
  3. Réponses: 2
    Dernier message: 10/04/2007, 11h58
  4. Réponses: 10
    Dernier message: 14/02/2007, 12h13
  5. Réponses: 2
    Dernier message: 01/09/2006, 00h02

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