Ik heb nu twee tabellen waar ik happy mee ben.
Dit zijn twee queries die ik heb gemaakt:
// de is query voor de tabel: beardie_fokkers
$sql = "SELECT fokker_id, fokker_kennelnaam, fokker_naam, fokker_telnr, fokker_email, fokker_website FROM beardie_fokkers";
// de query voor de tabel: beardie_nest
$sql = "SELECT nest_id, nest_geboortedatum, nest_nest_moeder, nest_vader, nest_geslacht_kleur, nest_betaald FROM beardie_nest";
Wat ik mis is dat ze beide aan elkaar worden gemaakt (gelinkt) tot 1 query en ik weet niet hoe dit te doen. Dus dat ik uiteindelijk 1 query krijg welke ùit beide tabellen de velden haalt zoals in beide queries vraag.
Uitgeschreven met de bijbehorende velden van betreffende tabellen:
$sql = 'SELECT fokker_kennelnaam, fokker_naam, fokker_telnr, fokker_email, fokker_website FROM beardie_fokkers WHERE fokker_id=nest_id';
Maar ik weet dat dit niet goed gaat maar zie even niet hoe op te lossen. Wie weet raad?
@ Blanche : helder en heb er nu in staan nest_fokker_id (ik laat dit even zo anders snap ik er zelf niets meer van en wanneer me alles echt duidelijk is verander ik het) maar nu ben ik weer terug naar af lijkt me want ik weet nu niet meer hoe de query wel zou moeten?
OK, stel je hebt een tabel met fokkers. Met een INNER JOIN zou je alle records op kunnen halen van fokkers die ook daadwerkelijk een of meerdere nesten hebben.
(In het voorbeeld haal ik maar enkele velden op omdat ik geen zin heb om alles uit te schrijven ;))
SELECT
f.fokker_naam,
n.nest_id
FROM
beardie_fokker AS f
beardie_nest AS n
WHERE
f.fokker_id = n.nest_fokker_id
Maar stel nu dat je gegevens van alle fokkers op wilt halen, dus ook van degene die nog geen nestje hebben. Je gebruikt dat een LEFT JOIN:
SELECT
f.fokker_naam,
n.nest_id
FROM
beardie_fokker AS f
LEFT JOIN
beardie_nest AS n
ON
f.fokker_id = n.nest_fokker_id
Op W3Schools staat een vrij duidelijke uitleg van het verschil tussen een INNER en OUTER (LEFT) JOIN.
[edit]Kleine aanpassing n.a.v een edit van Lissy's post[/edit]
@ Blanche : Ik heb een testpagina van de query die ik heb gemaakt. Om te kijken KLIK HIER
Wat de bedoeling is en wanneer ik alles naar behoren heb begrepen is dat de fokker(s) (het is er nu maar 1 want de database is gevuld met 1 fokker met 1 nest) worden laten zien die nest(en) hebben.
Hier de code:
<?php
session_start();
// Zo begin je met een nieuw script!
ini_set ('display_errors', 1);
error_reporting (E_ALL);
// de query
$sql = "
SELECT
f.id,
f.kennelnaam,
f.naam,
f.telnr,
f.email,
f.website
n.id,
n.fokker_id
n.geboortedatum,
n.moeder,
n.vader,
n.geslacht_kleur,
n.betaald
FROM
beardie_fokkers AS f,
beardie_nest AS n
WHERE
f.id = n.id
";
Het klopt nog niet helemaal. In je WHERE clause koppel je de tabellen nu namelijk op het punt waar het id van de fokker gelijk is aan het id van een nest. Je zult dan altijd maar 1 resultaat krijgen aangezien het id van een nest uniek is...
Sterker nog: het zelfs zo kunnen zijn dat je een nest selecteert dat niet eens bij die fokker hoort.
Je hebt in je tabel beardie_nest nu ook een fokker_id staan. Je zult dus moeten hebben
WHERE
f.id = n.fokker_id
Op deze manier selecteer je de fokkers uit de eerste tabel met alle bijbehorende nesten uit de tweede tabel. Als een fokker nu nog geen nest heeft, wordt hij ook niet geselecteerd.
ps. Mocht je nu ook de fokkers selecteren die nog geen nest hebben, dan kun je dat doen met behulp van een LEFT JOIN. Mocht dat het geval zijn, dan wil ik je wel even een voorbeeldje geven...