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 :

Comment s'y prendre ?


Sujet :

Langage SQL

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut Comment s'y prendre ?
    Bonjour tout le monde.

    J'essai de récupérer des données de deux tables pour les insérer dans une troisième affin de simplifier celle ci. Pour ce faire j'utilise normalement phpmyadmin

    Voila mon reeil problème. Mes trois tables traite le même type de données mais sous des format et nom diférrents
    Et la bah du coup je ne peux plus rien faire

    Je voudrais donc avec le peu de donnée que j'ai sous la main essayer d'avoir un peu d'aide

    Commencons par la table de destination.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM `acteur_realisateur` WHERE 1`id_auteur_realisateur`, `noms`, `prenoms`, `dates_naissances`, `nationalites`, `biographies`, `activites_acteurs`, `activites_realisateurs`
    On peut remaqué que activites_acteurs et activites_realisateurs contiendrons 0 ou 1 selon si on a affaire à un acteur, un réalisateur ou un acteur et réalisateur

    La table acteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT  `NUM_ACTEUR` ,  `NOM_ACT` ,  `PRENOM_ACT` ,  `DATE_NAISSACT` ,  `NATIONALITE_ACT` ,  `PHOTO` ,  `BIOGRAPHIE` 
    FROM  `acteur`
    La on utilise plus du tout la partie photo inutilisé donc pas nécéssaire

    et enfin la table realisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT  `NUM_REAL` ,  `NOM_REAL` ,  `PRENOM_REAL` ,  `DATE_NAISSREAL` ,  `NATIONALITE_REAL` ,  `PHOTO_REAL` ,  `BIOGRAPHIE_REAL` 
    FROM  `realisateur`
    La non plus on utilise pas la colone photo mais ca nous simplifie une fis de plus la tache

    Et enfin il faudrais que je face celà en 2 etappes

    1 on place le cntenu de la table acteur dans acteur_realisateur:
    NUM_ACTEUR -> id_auteur_realisateur
    NOM_ACT -> noms
    PRENOM_ACT -> prenoms
    DATE_NAISSACT -> dates_naissances
    NATIONALITE_ACT -> nationalites
    BIOGRAPHIE -> biographies
    1 -> activites_acteurs
    0 -> activites_realisateurs
    2 on place le contenu de la table réalisateur dans acteur_realsateur:
    NUM_REAL -> id_auteur_realisateur
    NOM_REAL -> noms
    PRENOM_REAL -> prenoms
    DATE_NAISSREAL -> dates_naissances
    NATIONALITE_REAL -> nationalites
    BIOGRAPHIE_REAL -> biographies
    0 -> activites_acteurs
    1 -> activites_realisateurs
    Enfin je traiterais les doublons.
    Est ce que quelqu'un peut m'aider pour faire ces deux manips s'il vous plait ?
    Cordialement.

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    En gros tu as ces deux tables :

    ACTEUR
    NUM_ACTEUR -> id_auteur_realisateur
    NOM_ACT -> noms
    PRENOM_ACT -> prenoms
    DATE_NAISSACT -> dates_naissances
    NATIONALITE_ACT -> nationalites
    BIOGRAPHIE -> biographies
    1 -> activites_acteurs --inutile
    0 -> activites_realisateurs --inutile

    REALISATEUR
    NUM_REAL -> id_auteur_realisateur
    NOM_REAL -> noms
    PRENOM_REAL -> prenoms
    DATE_NAISSREAL -> dates_naissances
    NATIONALITE_REAL -> nationalites
    BIOGRAPHIE_REAL -> biographies
    0 -> activites_acteurs --inutile
    1 -> activites_realisateurs --inutile

    Pour les Inutile : je suppose que c'est pour distinguer un realisateur d'un acteur que tu as fait ca ! pour ceux qui ont le double role ben... ils sont dans les deux tables

    Tu as une solution a peut pres simple qui serait :

    PERSONNE
    ID_PERSONNE -> Id
    NOM_PERSONNE -> nom
    PRENOM_PERSONNE -> prenoms
    DATE_NAISS -> dates_naissances
    NATIONALITE -> nationalites
    BIOGRAPHIE -> biographies
    FLAG_ACT -> activites_acteurs 0 ou 1
    FLAG_REAL -> activites_realisateurs 0 ou 1

    Ici ton flag servira

    a partir de la :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    INSERT INTO PERSONNE (
    (SELECT
    NUM_ACTEUR
    , NOM_ACT
    , PRENOM_ACT
    , DATE_NAISSACT
    , NATIONALITE_ACT
    , BIOGRAPHIE
    , 1
    , 0
    FROM ACTEUR
    ) 
    UNION
    (
    SELECT
    NUM_REAL
    , NOM_REAL
    , PRENOM_REAL
    , DATE_NAISSREAL
    , NATIONALITE_REAL
    , BIOGRAPHIE_REAL
    , 0
    , 1
    FROM REALISATEUR
    )
    )
    Apres il faut que ton ID_PERSONNE soit du meme type que les deux autres
    ou tu le mets de type VARCHAR2 et tu fais des TO_CHAR au niveau de tes codes. De plus tes codes doivent etre eux aussi different pour ne pas avoir d'erreur (contraint unique), pour passer a cote de cette erreur tu peux ajouter avant le code acteur les trois lettre act et real pour les realisateurs... avec ce systeme les flags seront limites superflux mais il est vrai que c'est plus simple de tester la valeur d'une flag plutot que d'un SUBSTR

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Je vais passé pour un noob
    Peut on me décrire la propriété union s'il vous plait ?

    J'en aurais besoin pour mon apprentissage et egaillé ma curiosité personnel
    Merci beaucoup pour vos précisions
    Cordialement.

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    On ne passe jamais pour un noob Toute question est intelligente !

    Voici la définition : (je pense qu'elle n'est pas mauvaise)
    L'opérateur UNION

    Cet opérateur permet d'effectuer une UNION des lignes sélectionnés par deux clauses SELECT (les deux tables sur lesquelles on travaille devant avoir le même schéma).

    SELECT ---- FROM ---- WHERE ------
    UNION
    SELECT ---- FROM ---- WHERE ------

    Par défaut les doublons sont automatiquement éliminés. Pour conserver les doublons, il est possible d'utiliser une clause UNION ALL.

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Ah ok!

    Petite question
    Il est dit plus haut qu'il faut gardé le même shéma, mon prédécésseur ne la pas fait du coup je me retrouve une nouvelle fois coincé

    Bon je vais mettre des varchar 50 partout et des texts partout ou c'est necessaire et je re tente l'exportation.

    Au niveau des doubloons, il faut que je les garde car un auteur peut être réalisateur

    Merci infiniment pour vos réponses
    Cordialement.

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Euh pour les doublons il te faudra faire un update
    En fait il faudra juste mettre a jour le frag réalisateur a 1 si il se trouve dans la table realisateur

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Oui mais ca je le ferais après via un system perso en php, qui m'affiche ce qui fais avant de le faire
    Eviter de faire des erreur fais parfois gagné beaucoup de temps quand on se retrouve avec 5 ans de données enregistré sur des tables qui ne se ressemble plus

    Cordialement

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    C'est clair !!!
    Bon sur ce bon courage pour la suite je pense que tu n'as plus besoin de conseil de ma part

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Mwai bon c'est loin d'être gagner
    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
             INSERT  INTO acteur_realisateur((
    SELECT NUM_ACTEUR, NOM_ACT, PRENOM_ACT, DATE_NAISSACT, NATIONALITE_ACT, BIOGRAPHIE, 1, 0
    FROM acteur
    )
    UNION (
    SELECT NUM_REAL, NOM_REAL, PRENOM_REAL, DATE_NAISSREAL, NATIONALITE_REAL, BIOGRAPHIE_REAL, 0, 1
    FROM realisateur
    )
    )     
          MySQL a répondu: 
      #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT
            NUM_ACTEUR
            , NOM_ACT
            , PRENOM_ACT
            , DATE_NAISSACT
            , NATIO' at line 3
    et si je tappe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    requête SQL:     
                  INSERT  INTO acteur_realisateur( 
    SELECT  NULL , NOM_ACT, PRENOM_ACT, DATE_NAISSACT, NATIONALITE_ACT, BIOGRAPHIE, 1, 0
    FROM acteur )      
          MySQL a répondu: 
      #1062 - Duplicate entry '0' for key 1
    Je ne voie pas trop pourquoi!
    Cordialement

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    requête SQL:     
                  INSERT  INTO acteur_realisateur( 
    SELECT  NULL , NOM_ACT, PRENOM_ACT, DATE_NAISSACT, NATIONALITE_ACT, BIOGRAPHIE, 1, 0
    FROM acteur )      
          MySQL a répondu: 
      #1062 - Duplicate entry '0' for key 1
    Ca c'est normal parce qu'une clé ne peut pas etre null

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Donc comment faire pour que les enregistrement se face avec l'auto incrément sans les prendre en compte dans ma requette tout en gardant les bonnes informations s'il vous plait ?

    Cordialement

  12. #12
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Euh... a la place de Null tu mets ROWNUM ca peut peut etre marché

  13. #13
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Bon et bien ca ne fonctionne pas du tout !
    Je suis à la limite de pensé que c'est impossible!

    Existe t il une autre possibilité ?
    Cordialement

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Peux tu m'envoyer les scripts de création de toute tes tables STP

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Je t'envoie celà en MP
    Merci encore pour ton aide
    Cordialement

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

Discussions similaires

  1. [LDAP] comment s'y prendre pour faire une recherche complexe
    Par dervish dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/03/2006, 14h56
  2. [MySQL] Comment s'y prendre pour une expiration après deux jours ?
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/01/2006, 20h36
  3. MySQL sous linux comment s'y prendre?
    Par Doberman dans le forum Débuter
    Réponses: 4
    Dernier message: 10/01/2006, 11h58
  4. Site multilingue : comment s'y prendre ?
    Par sg-40 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 26/04/2005, 14h40
  5. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17

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