Query voor twee tabellen
Ik heb twee tabellen Honden en Fokkers waarbij ik diverse velden heb staan met unieke gegevens.
Nu wil ik graag een query maken waarbij ik de gegevens uit de tabel Fokker kan halen en ook gegevens uit de tabel Honden.
Een voorbeeld wat ik graag wil realiserener:
Er zijn fokkers die hebben puppies en nu wil ik een pagina maken waarbij ik zowel de fokkers vermeld (of een gedeelte van de gegevens van de tabel) en daarbij welke honden deze puppies hebben gekregen en ook het aantal puppies met hun kenmerken.
De opbouw van beide tabellen is als volgt:
Fokkers
id int(11)
fokker_id int(11)
kennelnaam varchar(255)
plaatje varchar(255)
naam varchar(150)
adres varchar(255)
postcode varchar(10)
woonplaats varchar(255)
telnr varchar(15)
email varchar(100)
website varchar(50)
bericht text
inschrijfdatum datetime
Honden
id int(11)
fokker_id int(11)
naam varchar(150)
geboortedatum date
moeder_id int(11)
vader_id int(11)
geslacht enum('Reu', 'Teef')
kenmerk varchar(255)
Deze twee tabellen zijn er al en er is ook fictief data in.
Hoe doe ik dit?
Dan haal je zo zijn fokker-gegevens op:
SELECT h.naam, f.naam, f.kennelnaam
FROM honden AS h, fokkers AS f
WHERE h.fokker_id = f.id
AND h.id = 1
ORDER BY f.kennelnaam ASC
zo heb je alvast een beginnetje.
@ Robert : ik ga het proberen en is kijken of ik verder kom met het samenstellen van de query :) Bedankt voor het meedenken in iedergeval.
Gaat wel morgen worden. Fijne avond allemaal.
Wat nog wel een uidaging zal worden, is hoe je snel de namen van de vader en de moeder eruit kunt laten rollen, als je het puppy_id weet.
Op basis van het vader_id en het moeder_id kun je achterhalen welke hond bij welke ouders hoort. Dus eigenlijk is dan het puppy_id een alias voor honden_id.
Als je op de mysql site kijkt bij de manual wordt het voorbeeld van huisdieren gebruikt om te laten zien hoe je met (gekoppelde) tabellen omgaat en er de gegevens uithaalt. (hoofdstuk 3 van de manual)
@Frank : Mijn opzet is in dit geval om de fokkergegevens te kunnen ophalen en waneer ze een nestje hebben gefokt dat je dan vader en moeder hond ingeeft met de desbetrefffende gegevens zoals ze in de tabel staan zodat je de kids (puppies) kunt laten zien. Ik heb puupy_id genomen omdat ik zo nog wet wat wat is ;)
Wil je een database gaan opzetten met alle rashonden en in dit geval bearded collies waarbij je dan hun ouders en hun grootouders en overgrootouders etc. invoert dan is de insteek denk ik anders voor wat je wil laten zien of weergeven. Maar goed het is maar waarvoor de database dient denk ik of ga ik ergens in mijn gedachtengang fout?
@ Hein : Dank je wel voor je reactie en dit ga ik zeker bekijken!!! Ik hoop dat me dit wat meer inzicht gaat geven zodat ik weer verder kan :)
Hier de tabellen:
Honden
pup_id int(11)
fokker_id int(11)
pupnaam varchar(150)
geboortedatum date
moeder_id int(11)
vader_id int(11)
geslacht enum('Reu', 'Teef')
kenmerk varchar(255)
fokkers
id int(11)
fokker_id int(11)
kennelnaam varchar(255)
plaatje varchar(255)
naam varchar(150)
adres varchar(255)
postcode varchar(10)
woonplaats varchar(255)
telnr varchar(15)
email varchar(100)
website varchar(50)
bericht text
inschrijfdatum datetime
Hein:
Als je op de mysql site kijkt bij de manual wordt het voorbeeld van huisdieren gebruikt om te laten zien hoe je met (gekoppelde) tabellen omgaat en er de gegevens uithaalt. (hoofdstuk 3 van de manual)
Heb je toevallig de bewuste link voorradig?
http://www.mysql.org/doc/refman/4.1/en/tutorial.html
en iets verder
http://www.mysql.org/doc/refman/4.1/en/selecting-all.html
en iets verder
http://www.mysql.org/doc/refman/4.1/en/selecting-all.html
pup_id int(11)
fokker_id int(11)
pupnaam varchar(150)
geboortedatum date
moeder_id int(11)
vader_id int(11)
geslacht enum('Reu', 'Teef')
kenmerk varchar(255)
Ik mis het ras_id
kenmerk kan voor meerdere honden hetzelfde zijn dus eigenlijk aparte table.
fokkers
id int(11)
fokker_id int(11)
kennelnaam varchar(255)
plaatje varchar(255)
naam varchar(150)
adres varchar(255)
postcode varchar(10)
woonplaats varchar(255)
telnr varchar(15)
email varchar(100)
website varchar(50)
bericht text
inschrijfdatum datetim
id int(11)
fokker_id int(11)
Is volgens mij dubbel.
Het adres van de kennel kan je ook in een aparte tabel stoppen. Kortweg alles wat bij meerdere honden of fokkers voor kan komen moet (eigenlijk) een eigen tabel hebben.
ik denk daarbij aan hond_kleur, fokker_woonplaats, enz
Klaasjan
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
@ Klaasjan : Deze database is slechts voor 1 hondenras de Bearded Collie en er zal hierop niet worden geselecteerd en is dus een constante waarde.
Zelf dacht ik dat bij beide tabellen dit:
fokker_id int(11)
voorkomt en dat is toch niet de bedoeling of heb ik dit mis?
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
Zie mijn edit
@ Klaasjan : daar zit wat in wat je zegt en ik ga hier is wat in rangschikken en hernoemen en dan kom ik er bij je op terug. Ik heb nog geen idee hoe alles dan verder zou moeten voor wat betreft het samenstellen van de query maar eerst maar is de opbouw van de database OK hebben is mijn idee. Bedankt voor zover voor het meedenken !
tabel: beardie
beardie_id int(11)
beardie_naam varchar(150)
beardie_geboortedatum date
beardie_moeder_id int(11)
beardie_vader_id int(11)
beardie_geslacht enum('Reu', 'Teef')
tabel: kenmerk
kenmerk varchar(255)
tabel: fokker
fokker_id int(11)
fokker_kennelnaam varchar(255)
fokker_plaatje varchar(255)
fokker_naam varchar(150)
fokker_adres varchar(255)
fokker_postcode varchar(10)
fokker_woonplaats varchar(255)
fokker_telnr varchar(15)
fokker_email varchar(100)
fokker_website varchar(50)
fokker_bericht text
fokker_inschrijfdatum datetime
Zijn er voor deze opbouw nog tips of ga ik met de database ergens fout?
tabel 'ouders':
id (kun je evt. weglaten)
hond_id (FK met de tabel honden)
ouder_id (FK met de tabel honden)
De combinatie van hond_id en ouder_id moet de eigenschap UNIQUE meekrijgen.
Verder zou je in de database nog een constraint mee moeten geven dat een hond niet aan 2 teefjes of 2 reuen kan worden gekoppeld.
Zorg er voor dat je de innoDB-engine binnen MySQL gebruikt, anders kun je geen foreignkey's gebruiken.
Hoe maak ik een koppeltabel voor dit:
Het vader en moeder-id in de tabel honden is eigenlijk niet ideaal. Je zou deze gegevens eigenlijk in een aparte kopeltabel moeten zetten. Ik kan je motivatie helemaal begrijpen!
Wat is bedoelt met (FK met de tabel honden) wat hier staat:
tabel 'ouders':
hond_id (FK met de tabel honden)
ouder_id (FK met de tabel honden)
Hoe geef ik een constraint mee in de database?
Wat is bedoelt met innoDB-engine binnen MySQL?
Moet ik wat aanvinken of?
Wellicht ga je lachen om deze vragen maar ja het is niet anders.... Wat ik graag wil is een correct functionerende database waar ik straks veel mensen blij mee kan maken :)
Meestal gebruiken mensen de my_isam tables. Frank zijn suggestie is de INNODB tables te gebruiken ivm het ontbreken van CONSTRAINTS in my_isam.
Een constraint is een voorwaarde welke je reeds in de DB kunt opgegeven.
Bijv in een veld van een table kan alleen de waarde blaat voorkomen.
Of de waarde blaat mag alleen voorkomen in de table als deze ook voorkomt in een andere tabel.
Zwolle mag alleen gebruikt worden als woonplaats als deze ook ik de tabel woonplaatsen voorkomt.
Houd je er niet aan dan krijg je een CONTRAIN KEY VIOLATION.
Kijk eens ook eens naar de tut van Remco van Arkelen over POTGRESQL. Staat ook een hoop info over DB design in
Quote:
Wellicht ga je lachen om deze vragen maar ja het is niet anders.... Wat ik graag wil is een correct functionerende database waar ik straks veel mensen blij mee kan maken
Wilde iedereen dat maar
Ga ik nu eerst effies naar de tut van Remco en dan kom ik wel weer terug met vragen voor het opzetten want ik geloof beslist dat dit goed gaat komen ;)