Query voor twee tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Lissy Pixel

Lissy Pixel

30/09/2006 18:48:00
Quote Anchor link
Hier ben ik weer en voor alle duidelijkheid ik heb zelf nog nooit met koppeltabellen gewerkt of zelf (kunnen) gemaakt.

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?
 
PHP hulp

PHP hulp

18/11/2024 10:51:06
 
Robert Deiman

Robert Deiman

30/09/2006 19:15:00
Quote Anchor link
Kijk ook even in dit topic dan Lissie, volgens mij gaat dat een beetje over hetzelfde ;)
http://www.phphulp.nl/forum/showtopic.php?cat=12&id=22931&lasttopic=1
 
Jan Koehoorn

Jan Koehoorn

30/09/2006 19:25:00
Quote Anchor link
Stel puppy heeft id 1 in de tabel honden:

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

Lissy Pixel

30/09/2006 19:43:00
Quote Anchor link
@ Robert : ik ga het proberen en is kijken of ik verder kom met het samenstellen van de query :) Bedankt voor het meedenken in iedergeval.
 
Lissy Pixel

Lissy Pixel

30/09/2006 19:44:00
Quote Anchor link
@ Jan : dank je wel Jan zo ga ik verder met proberen en kijken of ik dit aan de 'praat' krijg. Jullie horen van me :)
Gaat wel morgen worden. Fijne avond allemaal.
 
Jan Koehoorn

Jan Koehoorn

30/09/2006 20:00:00
Quote Anchor link
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.
 
Frank -

Frank -

30/09/2006 20:21:00
Quote Anchor link
@Jan: Een puppy_id zal in werkelijkheid niet bestaan, iedere hond is ooit puppy geweest. De status 'puppy' is afhankelijk van de leeftijd van de hond.

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

Hein

30/09/2006 22:02:00
Quote Anchor link
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)
 
Lissy Pixel

Lissy Pixel

01/10/2006 08:30:00
Quote Anchor link
@ Jan : deze hele opzet van maken van database voor in dit geval de honden is mijn "droom" en eigenlijk de basis geweest om met PHP te beginnen en ik vind nu wel dat ik dit kan gaan proberen.

@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 :)
 
Lissy Pixel

Lissy Pixel

01/10/2006 10:38:00
Quote Anchor link
Ik loop toch weer vast met de velden van de database omdat ik toch van mening ben dat 1 veld maar 1 keer mag voorkomen dus om de nomalisatie toch voor elkaar te krijgen vraag ik de kenners willen jullie er nog een keer naar kijken zodat dit correct is voordat ik verder ga?

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
 
Lissy Pixel

Lissy Pixel

01/10/2006 10:45:00
Quote Anchor link
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?
 
Hein

Hein

01/10/2006 12:43:00
 
Klaasjan Boven

Klaasjan Boven

01/10/2006 12:45:00
Quote Anchor link
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)

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
 
Lissy Pixel

Lissy Pixel

01/10/2006 12:57:00
Quote Anchor link
@ Hein : dank je wel voor het vermelden van de linken :))

@ 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
 
Klaasjan Boven

Klaasjan Boven

01/10/2006 13:00:00
Quote Anchor link
Zie mijn edit
 
Lissy Pixel

Lissy Pixel

01/10/2006 13:06:00
Quote Anchor link
@ 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 !
 
Lissy Pixel

Lissy Pixel

01/10/2006 14:02:00
Quote Anchor link
Nu heb ik dit als opzet:

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?
 
Frank -

Frank -

01/10/2006 14:40:00
Quote Anchor link
Het vader en moeder-id in de tabel honden is eigenlijk niet ideaal. Je zou deze gegevens eigenlijk in een aparte kopeltabel moeten zetten. Op basis van de gekoppelde hond blijkt dan of dit de vader of de moeder is, afhankelijk van het geslacht van deze hond. Het geslacht wordt dan slechts 1 keer opgeslagen. Nu heeft de kolom waarin de ouder staat ook een betekenis m.b.t. het geslacht terwijl het geslacht al is opgeslagen.

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

Lissy Pixel

01/10/2006 14:49:00
Quote Anchor link
@ Frank : ik heb wat vraagjes en hier ga ik:

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 :)
 
Klaasjan Boven

Klaasjan Boven

01/10/2006 14:59:00
Quote Anchor link
FK staat voor Foreign Key. Deze komt voor bij meer op meer relaties zoals in Frank zijn voorstel de bedoeling is

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
 
Lissy Pixel

Lissy Pixel

01/10/2006 15:05:00
Quote Anchor link
Helder Klaasjan voor deze uitleg.
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 ;)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.