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 :

Quelle instruction sql pour faire ça?


Sujet :

Langage SQL

  1. #1
    davbad
    Invité(e)
    Par défaut Quelle instruction sql pour faire ça?
    Bonjour,

    J'ai ceci en base :

    champ1 champ2 champ3 champ4 champ x
    11111 45689 89654 14587 78541
    11112 12546 12578
    11113 45876 45682 89652


    et je voudrais après traitement arriver à ceci
    champ1 champ2
    11111 45689
    11111 89654
    11111 14587
    11111 78541
    11112 12546
    11112 12578
    etc...

    sachant que mon nmbre de colonnes à traiter peut atteindre 60.

    Auriez-vous une idée?

    Cordialement

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Heu...

    Je comprend pas la question

    Tu cherche à ajouter des lignes (INSERT INTO) à modifier des lignes (UPDATE WHERE) ?

    Ou c'est tout autre chose ?

  3. #3
    davbad
    Invité(e)
    Par défaut
    en fait, ces données m'ont été livrées comme ça.
    Sur ma première table :
    Dans la col1, j'ai un code (nomenclature ROME). Dans les autres colonnes ce sont des codes de correspondance dans une autre nomenclature qu'est le formacode.

    Il faudrait que je transforme ces correspondances en n'utilisant que deux colonnes.
    la col1 pour mon code ROME et la col2 pour la correspondance dans le formacode.
    Sauf qu'il faut que je multiplie autant de fois ma ligne pour un code ROME donné, que j'ai de colonnes de correspondance formacode.

    Pour essayer d'être clair (c'est pas facile), j'ai une ligne dans ma table d'origine qui est comme ça :

    col1 col2 col3 col4
    11111 12345 67891 23456

    dans ce cas mon code rome 11111 à trois correspondance formacode qui sont 12345, 67891, 23456

    Il faudrait donc que cela se traduise dans la nouvelle table comme ceci :
    col1 col2
    11111 12345
    11111 67891
    11111 23456

    Est-ce plus clair?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Dans ce cas, avec juste ces deux colonnes de toutes façons ça passera pas il te faut au moins une colonne avec un identifiant unique ( je te conseille un champ "ID" auto-incrémenté.

    ensuite éclaire moi encore un peu :

    je suppose que tu as plusieurs ligne dans ta base d'origine avec un code ROME (col1) et autant d'autres colonne qu'il y a de correspondances formacode, c'est ça ?

    De plus quel doit etre le résultat final d'une requète adréssée à ta nouvelle table ?

  5. #5
    davbad
    Invité(e)
    Par défaut
    Dans ma table il y a 466 lignes et une soixantaine de colonnes.
    En fonction des ROME, certaines colonnes sont à null puisque le nombre de correspondances formacodes n'est jamais le même.

    Pour que tout soit très clair, je joins la table complète au format texte.
    La première colonne est le ROME, les autres sont toutes des formacodes.
    RomeFCod.txt

    Pour la première ligne de mon fichier, il faut que j'ai ceci en résultat dans ma nouvelle table, avec comme tu le dis un champ ID.
    11111 42056
    11111 42079

    Cette table résultante est simplement une table de liaison entre les deux nomenclatures. J'aurais par exemple besoin de savoir quels formacodes sont associés à tel ROME, ou quel ROME est associé à tel formacode.
    Les résultat final est donc du type de ce que j'ai mis plus haut :
    11111 42056
    11111 42079

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Attends un peu hein,

    j'ai compris ta question

    je suis dessus.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Ok, voici ta solution pour créer ta deuxième table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    $tab=file('RomeFCod.txt');
    $i=0;
    foreach($tab as $var){
    if($i==0) $i++;
    else{
    $detail=explode(';',$var);
     
    foreach($detail as $key=>$value){
    if($key==0)$Rom=$value;
    else{
    $query_rsRom="INSERT INTO test SET col1='".$value."', col2='".$Rom."'";
    $rsmajRom=mysql_query($query_rsRom, $taConexion) or die(mysql_error());
    }; 
    }
    }
    }
    il faut que ton fichier texte soit à coté de ce fichier et bien sûr que ce fichier puisse se connecter à la BDD

    De plus je n'ai pas mis d'instruction pour la création de la table.

    Je l'ai créée avant dans la BDD

    elle comporte 3 champs de type Integer:

    ID est auto-incrémentée

    les deux autres champs se nomment col1 et col2... à ta charge de les renommer

    j'espère que ça te va

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Attends y'a une erreur

    il faut écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $tab=file('RomeFCod.txt');
     
    foreach($tab as $var){
     
    $detail=explode(';',$var);
     
    foreach($detail as $key=>$value){
    if($key==0)$Rom=$value;
    else{
    $query_rsRom="INSERT INTO test SET col1='".$value."', col2='".$Rom."'";
    $rsmajRom=mysql_query($query_rsRom, $taConnexion) or die(mysql_error());
    }; 
    }
    }
    je reteste et je te dis

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Oui voilà c'est parce que j'ai repris un code que j'utilisai pour autre chose.

    Dans ton cas le premier test avec $i ne sert à rien, au contraire il supprime la première ligne de ton fichier texte

  10. #10
    davbad
    Invité(e)
    Par défaut
    OK merci Alexdezark,

    Je vais tester ça aujourd'hui et je te fais un retour.

    Cdt

  11. #11
    davbad
    Invité(e)
    Par défaut
    Une question qui pourra te paraître très bète.
    Quel langage as-tu utilisé pour ce bout de code?

  12. #12
    davbad
    Invité(e)
    Par défaut
    j'ai trouvé c'est du php

Discussions similaires

  1. Problème d'instruction SQL pour calculer un min
    Par aragorn23 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/02/2008, 14h08
  2. Quelle distribution choisir pour faire du RAID logiciel
    Par jbidou88 dans le forum Distributions
    Réponses: 3
    Dernier message: 06/12/2007, 19h37
  3. Quelle requête SQL pour obtenir mon résultat ?
    Par nicolas.pied dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/02/2007, 09h58
  4. requete sql pour faire un classement
    Par beezee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2006, 13h03
  5. Réponses: 3
    Dernier message: 11/11/2005, 15h52

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