Requete insert par rapport autre table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete insert par rapport autre table

Re: Requete insert par rapport autre table

par moogli » 17 oct. 2016, 15:58

salut,

tu faire ainsi
- créer la table client
- ajouter de la colonne id_client dans la table facture
- faire les insertions dans la table client a partir de la table facture avec une syntaxe de compète
INSERT
INTO clients
  (
    nom_client,
    nom_client2,
    adresse_client,
    adresse_client2,
    cp_client,
    ville_client
  )
SELECT DISTINCT nom_client,
  nom_client2,
  adresse_client,
  adresse_client2,
  cp_client,
  ville_client
FROM facture
- mettre à jour la table des factures
UPDATE facture f
SET f.id_client =
  (SELECT c.id_client
  FROM clients c
  WHERE c.nom_client    = f.nom_client
  AND c.nom_client2     = f.nom_client2
  AND c.adresse_client  = f.adresse_client
  AND c.adresse_client2 = f.adresse_client2
  AND c.cp_client       = f.cp_client
  AND c.ville_client    = f.ville_client
  )
- supprimer les 6 colonnes devenues inutiles.

le tour est jouer ;)

je te conseil quand même de faire un backup de la base avant de t'aventurer à la chose ;)
et aussi de ne pas le faire direct sur la base de production ;)

Dernière chose, quitte a revoir le modèle autant pousser la chose un peu plus loin.

la ville ne devrait pas être dans la table des clients dans une table à part (1èer forme normale atomicité des données ;) ).
tu peux aussi te dire qu'un client peux avoir plus adresses et donc il te faut une table pour stocker les adresses des clients.

ainsi tu y gagne sur la maintenance de ton appli et tu offre une option utile pour le client.

Pour alimenter ces deux tables en fonction de l'existant tu te bases sur ce que j'ai indiqué au dessus, avec quelques étape en plus mais le principe est ;)
par défaut tout les clients auront une seule adresse et donc il faut faire pointer la table facture sur la ligne d'adresse du client (parce que dans ce cas c'est la table facture qui porte l'adresse utilisée).

Ensuite tu vas pouvoir proposer d'avoir plus adresse : facturation, livraison , vacances etc...)

Pour les villes c'est simplement parce que cela évite les doublons inutiles en base et évite les erreur de syntaxe (coté front il faut proposer une combo avec auto complétion (exemple avec jquery https://jqueryui.com/autocomplete/).


@+

Re: Requete insert par rapport autre table

par Patriboom » 15 oct. 2016, 01:09

Je ne suis pas sûr de bien comprendre ton objectif, mais si c'est ce que je pense, j'irais des plus simplement.
1) dupliquer la table
2) supprimer les champs en trop de la première table, ayant soin de garder l'id
3) supprimer les champs en trop de la deuxième table, ayant soin de garder l'id

Les informations seraient ainsi séparées, mais - par l'id commun - facile à rassembler ou à lier.

Requete insert par rapport autre table

par guigui69 » 14 oct. 2016, 13:20

Bonjour à tous,

je suis entrain étudier de mettre à jour une application que j'avais fait il y a quelque année. Et j'ai mal construit une table.

J'ai une table Facture qui regroupe information sur les factures (date/ la société/.... et inscrit dedans les clients)

Code : Tout sélectionner

id_facture id_users id_societe id_concessions [b]nom_client nom_client2 adresse_client adresse_client2 cp_client ville_client[/b] date_facture users_date remarque
Et c'est ce dernier point (les informations clients)qui me pose problème.

J'aurai du créé une table a part au départ.

Je que je veut faire maintenant c'est corriger cela.

Donc J'arrive a extraire l'ensemble des clients présent dans ma table facture.:

Code : Tout sélectionner

SELECT DISTINCT `nom_client` , `nom_client2` , `adresse_client` , `adresse_client2` , `cp_client` , `ville_client` FROM `facture`
Et après je vais les insérer dans une table client. je vais arriver à faire un INSERT avec un SELECT ca devrait pas poser de problème.

Dans la table FACTURE, je vais rajouter un ID (ID_Client)

La ou je bloque c'est Comment faire un UPDATE dans l'ensemble de la table Facture pour dire de faire le lien entre ID_client présent dans la table Client et ID_client dans Facture.

J’espère que ma demande est compréhensible.

Merci d'avance pour vos explications

guigui69