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?
Aangezien 1 fokker meerdere nesten kan hebben, mis ik in de tabel beardie_nest de kolom fokker_id.

Zoals je je tabellen nu hebt, zijn ze compleet onafhankelijk van elkaar waardoor je ook niet met joins kunt werken.

ps. Persoonlijk zou ik ook de prefixen fokker_ en nest_ weglaten, aangezien je daar in je queries de tabelnamen of aliassen voor gebruikt.
@ 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 ga dit uitwerken en kom er bij je op terug!!! (((((dikke knuffel voor het helpen)))))
Succes, ik ben benieuwd...
@ 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
";

$res = mysql_query($sql);
echo $sql;
?>

Alles OK begrepen?
Er is nu maar 1 fokker, en 1 nest, maar je echo't nu de query, letterlijk zoals die in je code staat...
Het ziet er wel ok uit overigens.
@ Robert : ja en ik loop ook weer vast want hoe laat je dit nu zien... Ik had dit:

<?php
// 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
";

$res = mysql_query($sql);

if ($res && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
// de output
$fullpath = $imgpath . $row['id'].'.jpg';
$kennelnaam = $row['kennelnaam'];
$naam = $row['naam'];
$telnr = $row['telnr'];
$email = $row['email'];
$website = $row['website'];
$geboortedatum = $row['geboortedatum'];
$moeder = $row['moeder'];
$vader = $row['vader'];
$geslacht_kleur = $row['geslacht_kleur'];
$betaald = $row['betaald'];

echo '<p align=center><br /><img src="../../images/div1.gif" alt=sbcc>';
echo '<br />';

echo '<table width=500 border=2 cellpadding=1 cellspacing=1 class= teksttabel>';
echo '<tr><td>';
//echo '<p><image src="' . $fullpath . '"><br />';
echo '<p><a href="' . $row['website'] . "\" target=\"_blank\">" . '<image src="' . $fullpath . '"></a>';
echo '</td>';
//echo '<td><p><br /><b>' . $kennelnaam . '</b><br />';
echo '<td><p><a href="' . $row['website'] . "\" target=\"_blank\"><b>" . $kennelnaam . '</b></a><br />';
echo '<p>' . $naam . '<br />';
echo 'tel.nr: ' . $telnr . '<br />';
//echo 'email: ' . $email . '<br />';
echo 'email: <a href=mailto:' . $email . '>' . $naam . '</a><br />';

echo 'site: <a href="' . $row['website'] . "\" target=\"_blank\">" . $row['kennelnaam'] . '</a><br />';
//echo '<br /><img src="../../images/div1.gif" alt=sbcc>';
echo '</td></tr></table>';
echo '</p>';
}
}
?>

Maar dat gaat niet goed en ik weet niet waarom?
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...
lissy schreef op 06.10.2006 10:52

Maar dat gaat niet goed en ik weet niet waarom?


Ik ook niet Lissy, wat gaat er niet goed, geeft die helemaal niets weer, of geeft die wel wat weer maar niet goed?

Reageren