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

Requêtes MySQL Discussion :

fusionner 2 champs (colonnes)


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut fusionner 2 champs (colonnes)
    Bonjour à tous !

    Une petite interrogation quant à une requête :
    Si j'ai deux champs : dossard1 et dossard2, chacun comportant respectivement des chiffres.
    dossard1 : des chiffre compris entre 1 et 130
    dossard2 : des chiffres à partir de 131 et au delà

    Donc, pas 2 fois les mêmes valeurs !

    Est-il possible, avec une requête SQL de "mixer" les 2 colonnes ?
    Par exemple de regrouper en une seule colonne "dossard" qui se présenterait sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    1
    2
    3
    4
    131
    132
    133
    ...
    Si oui, quelle requête serait capable de ce miracle ?

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Que veux tu dire par regrouper les deux champs, Veux tu dire si l'un est nul alors on affiche l'autre? vu l'exemple que tu as donné, on ne peut pas pas vraiment cerner le sens de regrouper que tu emploie.
    Sinon si c'est pour afficher le champ non nul tu peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select ifnull(dossard1, dossard2) from table;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    non, les 2 champs vont contenir des données à coup sur ! (les numéro de dossard...)

    Fusionner dans le sens lister les 2 champs dans un seul et unique.

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Il y a bien la fonction CONCAT(), mais je ne vois pas l'intérêt de générer cette entropie en SQL.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    D'après l'exemple de résultat souhaité, il s'agit d'afficher la liste des dossard1 puis la liste des dossard2 en une seule requête non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT dossard1 AS dossard
    FROM latable
    ORDER BY dossard1
     
    UNION
     
    SELECT dossard2
    FROM latable
    ORDER BY dossard2
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    D'après l'exemple de résultat souhaité, il s'agit d'afficher la liste des dossard1 puis la liste des dossard2 en une seule requête non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT dossard1 AS dossard
    FROM latable
    ORDER BY dossard1
     
    UNION
     
    SELECT dossard2
    FROM latable
    ORDER BY dossard2
    Oui, j'avais pas remarqué ça .

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    oui, afficher le résultat de 2 champs dans une seule colonne (bon vocabulaire ?)

    Est-ce qu'on peut, avec cette requête, lister les autres champs de la table aussi ? comme le nom, prénom,...

    Merci d'avance !

  8. #8
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par st4nfield Voir le message
    oui, afficher le résultat de 2 champs dans une seule colonne (bon vocabulaire ?)
    Ma requête donne le résultat que tu souhaites ?

    Est-ce qu'on peut, avec cette requête, lister les autres champs de la table aussi ? comme le nom, prénom,...
    Si la réponse à ma question ci-dessus est oui, alors je réponds oui aussi. Il suffit de mettre les mêmes colonnes dans les deux sous-requêtes.

    Au fait, pourquoi avoir mis deux colonnes de dossards dans la table ?
    Mauvaise modélisation ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    En fait je ne peux pas te dire si ta requete marche car je suis en train de développer l'application ! Et je m'interroge sur cette histoire de dossard...

    pas facile, et je suis encore débutant ce qui n'arrange rien

  10. #10
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Donc je répète ma question :
    Au fait, pourquoi avoir mis deux colonnes de dossards dans la table ?
    Apparemment il n'est pas trop tard pour changer le modèle de données.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    ouaip mais si on met une seule colonne, le programme PHP et les requetes SQL deviennent beaucoup plus complexe et j'ai peur de ne pas y arriver...

    Qu'est-ce que tu proposes ?

  12. #12
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et si tu nous disais ce que tu essaies de faire exactement ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    Voici mon problème.

    J'ai un formulaire avec un choix de courses VTT. (liste SELECTavec value= 0,1,...,6)
    certaines courses (2 et 5) ont l'option transport en bus

    et c'est là que ça se complique énormément !
    Si il y a transport, on doit générer un numéro de dossard compris entre 1 et 130 (linéairement ! 1,2,3,...130)

    Si il n'y a pas de transport, on génère un numéro de dossard >130 (linéairement aussi : 131, 132,...)

    Et je suis complètement paumé là... c'est hyper complexe pour moi

  14. #14
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je suppose que ces dossards sont attribués pour une course à un coureur ?

    Tu prendras bien un peu de Mersie ?

    Règle de gestion :
    Un coureur peut participer à une course avec un numéro de dossard et une course peut accueillir plusieurs coureurs.

    MCD :
    Coureur -0,n----Participer(Dossard)----0,n- Course

    Tables :
    coureur_cre (cre_id, cre_nom, cre_prenom, cre_num_licence...)
    course_crs (crs_id, crs_nom, crs_date...)
    dossard_dos (dos_id_coureur, dos_id_course, dos_numero)

    Si il y a transport, on doit générer un numéro de dossard compris entre 1 et 130 (linéairement ! 1,2,3,...130)

    Si il n'y a pas de transport, on génère un numéro de dossard >130 (linéairement aussi : 131, 132,...)
    Ca ce n'est pas dans le modèle, c'est dans le traitement.

    Quel est le dernier dossard sans transport attribué dans la course n° 3 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MAX(dos_numero)
    FROM dossard_dos
    WHERE dos_numero > 130
      AND dos_id_course = 3
    Après il faut jouer avec ton langage de programmation pour récupérer en variable ce numéro afin de l'incrémenter de 1 quand tu enregistres un nouveau coureur pour la course n° 3.
    Attention ! Si plusieurs personnes saisissent les données en même temps, il peut y avoir utilisation multiple du même dossard.
    Penser à mettre une contrainte d'unicité sur le couple (dos_id_course, dos_numero).
    Utiliser aussi un trigger pour faire l'opération d'insertion en bloquant la table le temps d'insérer la nouvelle ligne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    oula, c'est chaud tout ça !

    Bon, moi je n'ai qu'une seule course, tous ces dossards (de 1 à 130 et de 130 à l'infini) participent tous à la même course !

    Qu'est-ce que ça change dans le modèle ?

  16. #16
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Faudrait savoir !
    Citation Envoyé par st4nfield Voir le message
    Bon, moi je n'ai qu'une seule course,
    J'ai un formulaire avec un choix de courses VTT.


    Trop tard pour répondre davantage, je m'en vais.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    Actuellement , quand j'exécute la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT MAX(dossard)
    FROM dossard
    ma table est vide et il ne se passe rien... est-ce normal ? ne devrait-il pas me renvoyer '0' ou 'NULL' ?

    EDIT : si c'est bon, il me retourne NULL

    EDIT 2 : il me retourne NULL en SQL mais rien en PHP, j'arrive pas à récupérer la valeur...

    EDIT 3: c bon, j'arrive à récupérer la valeur

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/03/2014, 21h28
  2. fusionner deux champs texte
    Par cezabs dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/10/2007, 14h22
  3. Fusionner 2 champs
    Par deadmeet dans le forum Access
    Réponses: 10
    Dernier message: 13/07/2006, 12h35
  4. [JTable] avoir un champ (colonne) caché
    Par koolway dans le forum Composants
    Réponses: 8
    Dernier message: 24/04/2006, 16h04

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