lien entre deux tables

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 : lien entre deux tables

par zab » 30 janv. 2008, 17:50

merci beaucoup à tous c'est ok ça marche

par Truc » 30 janv. 2008, 16:39

par Cyrano » 30 janv. 2008, 14:05

par d0m » 30 janv. 2008, 12:22

mais j'ai toujours id_commandes de la table article_commande qui reste à 0
ta requete va simplement prendre en base les commandes qui ont des articles dans la table article_commande.
Si tu n'as que 0 comme résultat c'est que tous tes articles son dans la commande d'id 0.

Avec une requête de selection tu ne vas pas changer ta base.
Tu nous embrouillais avec ta requête de selection.
C'est pour ça que je te conseillais de nous dire ce que tu veux faire exactement.

Apparement ce que tu veux c'est lorsque tu insères une commande et les articles correspondant, les articles soient rattachés à cette commande en question.

C'est à l'insertion qu'il faut donc entrer les bonnes valeurs.
quand tu insères une commande :

Code : Tout sélectionner

INSERT INTO commandes ....
il faut récupérer l'id de la commande insérée puisque celle ci est en autoincrement.
il faut donc utiliser la fonction mysql_insert_id pour récupérer l'id de cette commande.

Ensuite tu insère tous tes articles en spécifiant comme id_commandes l'id récupéré :
//insertion commande
.....
//recuperation de l'id
$id_commande = mysql_insert_id();

//ajout des articles
$requete = "INSERT INTO article_commande (id_commandes,...)
            VALUES (".$id_commande.",....)"

par iclo » 30 janv. 2008, 12:15

Bon alors voilà ce que j'ai fait grâce à votre aide merci

Code : Tout sélectionner

$sql="select commandes.id from commandes, article_commande WHERE article_commande.id_commandes = commandes.id"; $req=mysql_query($sql); $sql = "INSERT INTO articles_commande (id_commandes) VALUES('commandes.id')"; $req=mysql_query($sql);
mais j'ai toujours id_commandes de la table article_commande qui reste à 0
Pas très clair tout ça.

Tu veux selectionner l'id d'une commande en fonction du membre qui l'a réalisée et utiliser cette information pour faire des insertions dans une table d'article ?
Si c'est bien le cas, ton select doit bien ne porter que sur la table des commandes.
Avant d'essayer d'utiliser cette id, contente toi de le récupérer et de l'afficher. (step by step ;) )

par zab » 30 janv. 2008, 11:55

Bon alors voilà ce que j'ai fait grâce à votre aide merci

Code : Tout sélectionner

$sql="select commandes.id from commandes, article_commande WHERE article_commande.id_commandes = commandes.id"; $req=mysql_query($sql); $sql = "INSERT INTO articles_commande (id_commandes) VALUES('commandes.id')"; $req=mysql_query($sql);
mais j'ai toujours id_commandes de la table article_commande qui reste à 0

par Truc » 29 janv. 2008, 21:07

A condition d'ajouter la 2ème table aux tables de sélection (clause FROM)

Code : Tout sélectionner

... FROM commandes, article_commande WHERE ...
Ou par une jointure (JOIN)

Code : Tout sélectionner

SELECT ... FROM commandes JOIN article_commande ON commandes.id = article_commande.id_commandes
Un lien de la FAQ pour les jointures :)

Puisque tu as un champ nommé "id" dans chaque table tu dois préfixer du nom de la table le champ voulu :

Code : Tout sélectionner

SELECT commandes.id FROM ...
ou

Code : Tout sélectionner

SELECT article_commande.id FROM ...

Re: lien entre deux tables

par zab » 29 janv. 2008, 18:06

Ce qui est beau avec SQL, c'est qu'on le code comme on le parle :) :
je voulais que l'id_commande de la table article_commande soit égal à l'id de la table commande

Code : Tout sélectionner

WHERE article_commande.id_commandes = commandes.id
Donc il suffit que je fasse
$sql="select id from commandes WHERE article_commande.id_commandes = commandes.id";
$req=mysql_query($sql);
et j'aurai mon lien entre les deux tables ?

Re: lien entre deux tables

par Ryle » 29 janv. 2008, 17:44

Ce qui est beau avec SQL, c'est qu'on le code comme on le parle :) :
je voulais que l'id_commande de la table article_commande soit égal à l'id de la table commande

Code : Tout sélectionner

WHERE article_commande.id_commandes = commandes.id

par zab » 29 janv. 2008, 17:44

Salut, c'est pas très clair ce que tu racontes.
D'accord tu as tes 2 tables.

On dirait que tu cherches à faire une selection.
Avec cette requête (au passage il faut enlever les quotes autour de $id_membre car c'est une valeur numérique) :

Code : Tout sélectionner

"select id from commandes where id_membre=$id_membre";
Tu sélectionnes des commandes d'un membre.
Que cherches tu à faire? Explique en une phrase simple sans tenir compte du codage.
Je cherche à ce que : id_commande de la table article_commande = id de la table commandes
en fait j'ai une session panier et une session client, et le but de ces tables est d'identifié le client puis de voir sa commande pour ça id_membre de la table commandes est = à l'id de la table membre que je n'ai pas mis ici, et je cherche à faire la même chose entre la table commandes et la table articles_commandes

par d0m » 29 janv. 2008, 17:27

Salut, c'est pas très clair ce que tu racontes.
D'accord tu as tes 2 tables.

On dirait que tu cherches à faire une selection.
Avec cette requête (au passage il faut enlever les quotes autour de $id_membre car c'est une valeur numérique) :

Code : Tout sélectionner

"select id from commandes where id_membre=$id_membre";
Tu sélectionnes des commandes d'un membre.
Que cherches tu à faire? Explique en une phrase simple sans tenir compte du codage.

lien entre deux tables

par zab » 29 janv. 2008, 17:13

J'ai deux tables
une table commandes

Code : Tout sélectionner

CREATE TABLE commandes ( id tinyint(10) NOT NULL auto_increment, id_membre tinyint(10) default '0', `date` date NOT NULL default '0000-00-00', heure time NOT NULL default '00:00:00', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
et l'autre est la table article_commande

Code : Tout sélectionner

CREATE TABLE article_commande ( id tinyint(10) NOT NULL auto_increment, id_commandes tinyint(10) NOT NULL default '0', designation text NOT NULL, nom text NOT NULL, qte tinyint(11) NOT NULL default '0', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
je voulais que l'id_commande de la table article_commande soit égal à l'id de la table commande

voici mon code :
$sql="select id from commandes where id_membre='$id_membre'";
$req=mysql_query($sql);

 $row = mysql_fetch_assoc($req);
 $id_commandes= $row['id'];
mais j'ai un problème puisque le nombre que j'obtiens pour id_commande est inférieur de 1 à l'id de commandes
merci