lien entre deux tables

zab
Eléphanteau du PHP | 40 Messages

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

d0m
Mammouth du PHP | 1141 Messages

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.

zab
Eléphanteau du PHP | 40 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

zab
Eléphanteau du PHP | 40 Messages

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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 ...

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

zab
Eléphanteau du PHP | 40 Messages

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

ViPHP
ViPHP | 2144 Messages

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 ;) )

d0m
Mammouth du PHP | 1141 Messages

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.",....)"

Mammouth du PHP | 19672 Messages

30 janv. 2008, 14:05

Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 janv. 2008, 16:39


/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

zab
Eléphanteau du PHP | 40 Messages

30 janv. 2008, 17:50

merci beaucoup à tous c'est ok ça marche