Afficher un champ d'une table liée
le 25/01/2010 à 12:57
cyne
Bonjour,
lorsqu'on a 3 tables liées
table1 (animal)
id_animal
nom
table 2(races)
idrace
nom_race
table 3 (resume)
id_resume
id_animal
id_race
comment s'y prend-t'on pour afficher sur une page web, non pas les codes mais les noms et races des animaux?
mon cerveau bug à cet endroit...
Merci de votre aide
FP
Il faut comprendre le paradigme de base des bases de données relationnelles : l'algèbre relationnel. Tu devrais trouver des ressources sur le sujet assez facilement.
Ici la mal-nommée table « resume » est une table de jointure entre la table « animal » et la table « race ». Ceci gère la relation n..m entre les races de chien et les chiens individuellement... pour peu que les chiens puissent appartenir à plusieurs races.
Je ne suis pas convaincu par ton analyse.
En attenant, ce dont tu as besoin est :
select nom, nom_race as race
from animal join resume on animal.id_animal = resume.id_animal
join races on resume.id_race = race.idrace
Personnellement, j'aurais plutôt écrit quelque chose dans ce genre :
drop table if exists dogs, races ;
create table races
( id integer auto_increment
, name char(100) not null
, primary key (id)
) engine = innodb ;
create table dogs
( id integer auto_increment
, name char(100) not null
, race_id integer default null
, primary key (id)
, foreign key (race_id) references races(id)
) engine = innodb ;
insert into races (name) values
('Pékinois'), ('Caniche'), ('Chiwawa'), ('Boxer') ;
insert into dogs (name, race_id) values
('Gros bâtard', null), ('Dorothée', (select id from races where name = 'Caniche')) ;
Je te laisse deviner les requêtes de sélections qui vont bien ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le 25/01/2010 à 17:48
cyne
Merci LupusMic,
Dois-je en conclure que je n'ai pas besoin de 3 tables???
En tous cas, il faut que je relise ta réponse à tête reposée...tu m'as fait mal au crâne avec ton "paradigme"...
Pour ce qui est des chiens, tu peux effectivement avoir plusieurs "Mirza" dans un chenil et avoir une mirza cocker et une mirza berger allemand...
FP
Paradigme n'est pas un gros mot ;)
Tu n'as pas besoin de trois tables si la liste des chiens identifie des individus et qu'un chien ne peut que réclamer une race. Dans ce cas, tu as seulement besoin d'une clé étrangère nullable comme attribut d'un chien.
Si ton développement est un développement réel, il va falloir plus travailler le design de ta base. Le genre de question qu'il faut alors se poser, c'est : qu'est-ce qu'un chien ? Qu'est-ce qu'une race. Qu'est-ce qui rend un chien unique (son nom, son tatouage) ?
Et à partir de ces réponses tu peux commencer à concevoir correctement ta base, en appliquant des recettes simples.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le 26/01/2010 à 09:35
cyne
Tu l'as bien deviné, Mirza ne sera jamais intégrée dans un développement réel. cet ersatz de chien n'est qu'un prétexte à mon apprentissage...
En fait, j'ai bien un réel projet pour lequel j'ai défini des besoins et en réalisant ma maquette avec les écrans que je souhaite avoir, je me pose des questions qui se retrouvent ainsi sur le forum.
Comme je n'ai pas de personne qui puisse aujourd'hui m'épauler de a à z, j'avance par petis bouts...trop petits peut-être...mais c'est souvent le cas lorsqu'on a les idées mais pas l'argent.
FP
Tu peux toujours passer poser tes questions si tu es de passage. Nous sommes toujours ravis d'aider (dans la limite du stock de patience).
Mais si tu as un vrai projet qui peut faire l'objet d'une commercialisation, tu devrais surtout te focaliser sur ça plutôt que le développement. Il n'y a rien de pire pour un buisness que de se baser sur un logiciel codé par un débutant : c'est casse-gueule.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: