mais tu a raison j'aurais pu mettre un bout de code issu du tuto pour le coté php
@+
]]>Il serait tout simplement peut-être bon de rappeler à chacun le sens du verbe anglais to fetch
]]>Content que tu ais trouvé ce qui n'allait pas.
]]>@+
]]>encore merci
]]>apres je corrigerais la requete ainsi : SELECT voitures.nom as auto, pieces_historique.nom as nompiece, pieces_historique.id as idpiece FROM piecesautos INNER JOIN voitures ON idauto=voitures.id INNER JOIN pieces_historique ON idpiece=pieces_historique.id WHERE idpiece=3
voitures.nom est le "nom" de l'auto pas la clef primaire, ceci afin d'afficher une liste du style
+-------+----------------------+
| auto | piece |
+-------+----------------------+
| saxo | macaron BZH en force |
| yaris | macaron BZH en force |
+-------+----------------------+
@+
]]>Ma requete me donne aucun résultat, j'ai pourtant suivi toute ton explication :
Seuls modifs :
Ta table 'autos', est 'voitures'
Ta table 'pieces' est 'pieces_historique'
Ta table 'piecesautos' a le même nom chez moi.
Pour rappel, ta requete :
select autos.designation as auto, pieces.designation as piece from piecesautos inner join autos on idauto=autos.id inner join pieces on idpiece
=pieces.id where idpiece=3;
A+
hervé
@+
]]>en tout cas, un grand merci a toi pour cette réponse hyper détaillée...
]]>insert into pieces values(null,'pneu saxo'),(null,'penu yaris'),(null, 'frein saxo'),(null,'cardan yaris'),(null,'capot saxo');
une table qui fait la liaison entre les deux premières
create table piecesautos(
id int unsigned not null auto_increment,
idpiece int unsigned not null,
idauto int unsigned not null,
primary key (id)
)type=myisam;
insert into piecesautos values(null,1,1),(null,2,2),(null,3,1),(null,4,2),(null,5,1);
A partir de la si tu choisis une auto dans la 1ère table tu peu récupérer ls pièces qui y sont associées en utilisant une jointure
http://sqlpro.developpez.com/cours/sqlaz/jointures/.
Grosso modo c est quoi une jointure ?
He ben c'est les fait de faire une requete sur deux tables en même temps avec des infos identique entre les deux tables.
Dans notres cas idauto c'est la clef primaire de la table auto. Elle permet d'identifier un véhicule car c'est "id" est UNIQUE (a cause de la primary key ).
Même chose pour idpiece.
si tu choisis une voiture tu aura la clef primaire de la voiture que tu pourra utiliser sur la table piecesautos
select designation, piecesautos.id as idpiecesauto from piecesautos inner join pieces on idpiece=pieces.id where idauto=1;
select designation ,piecesautos.id as idpiecesauto from piecesautos inner join autos on idauto=autos.id where idpiece=6;
ici le 1 représente la valeur fournis par ton 1er formulaire ou lien. (donc $_GET['idauto'] par exemple)).
L'avantage de cette solution c'est que si tu te trompe sur une pice c'est facile a modifier et tu n'est pas obligé de modifier un champ bizard où tu a des chances de faire une annerie
si par exemple tu veut savoir a quelle voiture correspond une pièce (et afficher le nom de la piece) :
select autos.designation as auto, pieces.designation as piece from piecesautos inner join autos on idauto=autos.id inner join pieces on idpiece
=pieces.id where idpiece=6;
Comment aller plus loin ?
Par exemple en créant une table constructeurs qui contiendra .... (renault, citroen, peugeot, bmw etc). Dans la table autos tu ajoutera le idconstructeur
ensuite les requetes sont un poil plus compliqué mais le principe est la :d
par exemple on peu avoir
create table pays (
id smallint unsigned not null auto_increment,
nom tinytext not null,
primary key(id)
)type=myisam;
insert into pays values (null,'France'),(null,'Japon'),(null,'Allemagne'),(null,'Italie');
create table constructeurs (
id int unsigned not null auto_increment,
idpays smallint unsigned not null,
nom tinytext not null,
primary key(id)
)type=myisam;
insert into constructeurs values (null,1,'Citroën'),(null,1,'Peugeot'),(null,1,'Renault'),(null,2,'toyota'),(null,4,'Ferrari'),(null,4,'maserati'),(null,3,'BMW');
create table autos(
id int unsigned not null auto_increment,
idconstructeur int unsigned not null,
designation tinytext,
primary key(id)
)type=myisam;
insert into autos values (null,1,'saxo'),(null,4,'yaris');
pour avoir les voitures et les constructeurs et pays associés
select autos.designation as auto, constructeurs.nom as constructeur, pays.nom as pays from autos inner join constructeurs on autos.idconstructeur=constructeurs.id inner join pays on constructeurs.idpays=pays.id;
résultat
+-------+--------------+--------+
| auto | constructeur | pays |
+-------+--------------+--------+
| saxo | Citroën | France |
| yaris | toyota | Japon |
+-------+--------------+--------+
tu trouvera à cette adresse http://phpdebutant.org/wall2162.php le fichier sql que j'ai utilisé pour mes tests pour ce que j'ai mis plus haut
amuse toi bien
@+
PS : le lien sur les jointures est a lire en priorité si tu ne connais pas
]]>Tu a un probleme de modelisation de ta base.
Par exemple pour modifier ton champ tu est obligé de le faire a la main au risque de faire anerie. Imagine la taille du champ pour une rondelle ou les pneus de ma saxo
Il te faut une table auto : ok
Une table pieces : ok ( sans le champ disgracieux avec les id auto)
Une table piecesauto qui va faire la jointure entre les deux premieres
Par exemple
Id clef primaire
Idpieces
Idauto
Pas besoin d'autre chose et cela te permet de faire ta requete facilement
Je te fait un exemple plus concret si besoin quand je rentre
@+
]]>Déjà, mon $id_voiture provient d'un Get de cette façon là : $id_voiture = $_GET['id_voiture'];
Cette variable sera un nombre.
Ensuite, vu qu'une ref d'une piece auto peut s'adapter sur plusieurs sortes de voiture, dans ma table pieces_historique j'ai créé un champs qui se nomme 'auto' où je rempli de cette façon : 15/59/65/73/98 (qui siginifie toutes les sortes de voiture pour laquelle la pièce est compatible)
Donc, si notre $id_voiture = 65, j'aimerai que la pièce où le champs auto est : 15/59/65/73/98 s'affiche avec son prix, designation, reference etc.......
Si notre $id_voiture = 21, ca affiche PIECE NON DISPO POUR CETTE VOITURE.
En gros, je n'aurais pas eu ce probleme si une piece s'adapter que sur une unique sorte de voiture. Là, j'aurais simplement fait :
WHERE auto = '$id_voiture'.
Est ce que c'est un peu plus claire ?
Merci d'avance ...
]]>