Page 1 sur 2

Insertion données provenant d'une table dans une autre

Posté : 06 avr. 2006, 12:02
par betman
Bonjour à tous,

J'aimerais que vous m'expliquiez quelquechose :

Vià un moteur de recherche, j'affiche une liste de contact contenant plusieurs champs (nom, adresse, postal, tel, etc).

Ce que je souhaite faire, c'est de pouvoir cliquer sur un lien pour enregistrer ce contact (données) dans une autre table (carnet d'adresse).

Je ne vois pas comment procéder pour récupérer les données affichées et les réengristrer dans une autre table

Pouvez-vous m'éclairer ?

Re: Insertion données provenant d'une table dans une autre

Posté : 06 avr. 2006, 12:04
par mario
Je ne vois pas comment procéder pour récupérer les données affichées et les réengristrer dans une autre table
dans ta première table, as tu un champ INT primaire (ID) ?

Posté : 06 avr. 2006, 12:12
par betman
oui j'ai un id dans les 2 tables

Posté : 06 avr. 2006, 12:17
par mario
il te suffit donc d'insérer l'ID du contact dans la deuxième table
je ne comprend pas ce qui t'embete

Posté : 06 avr. 2006, 12:25
par betman
Bah, mes données qui s'affiche ne portent pas le forcément le même nom de champs. Par exemple je dois insérer un "agent" dans un champ "nom" sur une autre table.

est-que un truc du genre insert into agents='$_post['nom'] pourrais fonctionner ?

Posté : 06 avr. 2006, 12:26
par mario
montre nous la structure des deux tables stp ?

Posté : 06 avr. 2006, 12:37
par zeus
Tout simplement avec une requete INSERT SELECT

Code : Tout sélectionner

INSERT INTO carnet_adresse(nom, prenom, ...) SELECT nom, prenom, ... FROM contact WHERE id_contact = le_bon_id
Mais je te conseillerais de revoir la conception de ta table car tu va multiplier les données dans ta table et c'est très déconseillé ...

Je te propose le shéma suivant :

Code : Tout sélectionner

+---------------+ | contact | +---------------+ | id_contact | | nom | | prenom | | ... | +---------------+ +---------------+ | carnet_adr | +---------------+ | id_carnet | | id_proprio | +---------------+
Dans lequel la table carnet_adr ne contient qu'un lien vers le contact. Du coup, plus de multiplication de données, ce qui entraine :
- moins de place prise
- pas de pb de mise à jour ...

Posté : 06 avr. 2006, 12:57
par sadeq
Zeus +1 :pouce:

Posté : 06 avr. 2006, 14:16
par betman
mes tables sont construites comme ceci :

Code : Tout sélectionner

TABLE `carnet_add` ( `idcarnet` int(11) NOT NULL auto_increment, `identifiant` varchar(7) NOT NULL default '', `nom` text, `contact` text, `adresse` text, `postal` text, `ville` text, `tel` text, `portable` text, `mail` text, KEY `idcarnet` (`idcarnet`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

Code : Tout sélectionner

TABLE `agent` ( `code` int(10) NOT NULL default '0', `nom` varchar(24) NOT NULL default '', `adresse1` varchar(24) NOT NULL default '', `adresse2` varchar(24) NOT NULL default '', `postal` int(5) NOT NULL default '0', `ville` varchar(24) NOT NULL default '', `tel` int(14) NOT NULL default '0', `fax` int(14) NOT NULL default '0', `ctp` int(3) NOT NULL default '0', PRIMARY KEY (`code`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Sur la page ou les données s'affichent :
<?php
require_once('../Connections/bdIntranetConnect.php');

$query = "SELECT * FROM agent WHERE nom LIKE '".$_POST['nom']."%' AND postal LIKE '".$_POST['postal']."%' ORDER BY nom";

$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error());

while ($donnees = mysql_fetch_array($reponse) )
{
?>
Ma page qui ajout ces données dans l'autre table
<?php require_once('../Connections/bdIntranetConnect.php'); ?>
<?php
$query = "INSERT INTO carnet_add nom='".$_POST['nom']."', contact='".$_POST['contact']."', adresse='".$_POST['adresse']."'" ; 

$result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error());

header('location: recherche.php');

?>
Mais ton idée est bien meilleur ca simplifie les choses et comme tu dis pas de multiplication de données

Il faut que je revois la structure des mes tables

Posté : 06 avr. 2006, 14:25
par mario
le problème avec ta structure est que si tu modifie un contact, il ne sera pas modifié dans le carnet d'adresse :D

Posté : 06 avr. 2006, 14:39
par betman
Oui ça j'ai pigé le principe.

Mais je ne vois pas vraiment comment construire la requête pour effectuer un lien entr les bases j'ai fait ça pour le moment :
<?php require_once('../Connections/bdIntranetConnect.php'); ?>
<?php
$query = "INSERT INTO carnet_add (code) VALUE '".$_POST['code']."' , WHERE idagent='".$_GET['code']."'" ; 

$result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error());

header('location: recherche.php');

?>
mes tables sont structurés comme ceci now :)

la tables qui doit receptionner le lien :

Code : Tout sélectionner

CREATE TABLE `carnet_add` ( `idcarnet` int(11) NOT NULL auto_increment, `idagent` int(11) NOT NULL default '0', `identifiant` varchar(7) NOT NULL default '', `nom` text, `contact` text, `adresse` text, `postal` text, `ville` text, `tel` text, `portable` text, `mail` text, KEY `idcarnet` (`idcarnet`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
dans la table emmetrice de données je me sers de la clé primaire "code"
et du champ idagent dans la table receptrice carnet_add

donc si j'ai bien pigé le principe, je dois :

Lors de l'insertion dans la table carnet_add, lié code = idagent

en gros c ça ??

Posté : 06 avr. 2006, 15:00
par zeus
A qui est associé un carnet d'adresse ?

Il ne faut pas qu'il y ait les champs non, prenom, adresse, ... dans la table carnet_adr ...

Je voudrais un schéma syntétique me donnant les principales entitées de ta bases et leurs intéractions

Posté : 06 avr. 2006, 15:22
par betman
Ces 2 tables sont existantes et comportent déjà des données.

Moi je pensais rajouter un champ dans chacunes d'elles pour pouvoir effectuer le lien.

Je me servirai de la clé primaire de la table agent (code)

Pour faire la liaison avec la table carnet_add (idagent)

ca ne peux as fonctionner comme ca ?

Posté : 06 avr. 2006, 15:25
par zeus
Quelle est la différence entre ce qui est stocké dans agent et dans carnet_add ?

Un agent peut-il avoir plusieurs carnet d'adresse ?

Posté : 06 avr. 2006, 15:40
par betman
Pour bien expliquer :

Sur le site, les personnes qui ont un compte dispose d'un carnet d'adresse perso, qu'il peuvent remplir manuellement.

D'autre part il y a une table agent (commerciaux en gros) qui contient +3000 enregistrements.

Lorsque qu'un personne effectue une recherche sur la table agent, j'aimerai que les données de l'agent (nom, adresse, tel ...) se rajoute dans le carnet d'adresse perso de la personne.

les tables sont construites différement