Ik heb in mijn database 2 tabellen staan:

Kop
-id
-text
-url

Sub
-soort
-tekst
-link

Kop.id staat gelijk aan Sub.soort
Nou wil ik het als volgt uit de database halen:

Kop1
Sub1.1
Sub1.*
etc

Kop2
Sub2.1
Sub2.*
etc

Ik heb het zelf alsvolgt geprobeerd:


$sql = "
    SELECT
        k.id,
        k.text,
        k.url,
        s.soort,
        s.tekst,
        s.link
    FROM
        kop AS k
    INNER JOIN
        sub AS s
            ON s.soort = k.id
";


if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
    echo 'Geen records gevonden.';
}
else
{
    while($row = mysql_fetch_assoc($res))
    {
$count = mysql_num_rows($row[text]);
echo $count;
            echo $row['id'].' '.$row['text'].' '.$row['url'].' <br />('.$row['soort'].') ('.$row['tekst'].') ('.$row['link'].')<br />';

    }
}



Dit werkt wel alleen is niet wat ik wil bereiken omdat ik nu telkens de kop met daaronder de Sub krijg (terwijl ik alle subs onder 1 kop wil hebben).

Zou iemand mij op weg kunnen helpen?

MVG

Kevin de Jong
Dat is op deze manier wel te doen, maar je moet voor je while een lege variabele: $previous_kop maken.

Binnen je while moet je controleren of $previous_kop overeenkomt met de huidige kop, zo niet dan de kop weergeven met daarna de soort, zo wel dan alleen de soort weergeven. Je krijgt dan dus zoiets:


<?php
$sql = "
    SELECT
        k.id,
        k.text,
        k.url,
        s.soort,
        s.tekst,
        s.link
    FROM
        kop AS k
    INNER JOIN
        sub AS s
            ON s.soort = k.id
";


if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
    echo 'Geen records gevonden.';
}
else
{
   $previous_kop = '';
    while($row = mysql_fetch_assoc($res))
    {
//dit kan helemaal niet, je kan alleen rows van $res tellen
//$count = mysql_num_rows($row[text]);
        if($previous_kop != $row['id']){
            echo $row['id'].' '.$row['text'].' '.$row['url'].' <br />';
            }
//echo $count;
            echo '('.$row['soort'].') ('.$row['tekst'].') ('.$row['link'].')<br />';
        $previous_kop = $row['id'];
    }
}
?>


Een andere optie is met 2 query's gaan werken, maar daar zou ik niet aan beginnen.
Ah super bedankt! Het werkt nu beter alleen nog niet perfect, omdat de code ervan uit gaat dat de subs achter elkaar lopen zoals hier staat:

soort
1
1
2
2

nu is dit echter het geval:

soort
1
2
2
1

Bij deze laatste krijg ik dus 3 koppen met subs eronder terwijl er toch maar 2 koppen zijn!

Voorbeeld:
http://fysioklase.freehostia.com/menu.php

    SELECT
        k.id,
        k.text,
        k.url,
        s.soort,
        s.tekst,
        s.link
    FROM
        kop AS k
    INNER JOIN
        sub AS s
            ON s.soort = k.id
    ORDER BY
       k.id,
       s.tekst


Moet je even volgorde invoeren in je SQL. ORDER BY

Reageren