Avatar billede Slettet bruger
23. februar 2011 - 12:51 Der er 6 kommentarer og
1 løsning

Emner i kategorier - while i while eller smartere løsning?

Hej, i min database har jeg tabeller for hhv:
- Værktøj
- Kategori
- Emne

I databasen, er der en sammenhæng som følger:
1) "Værktøj" har: id
2) "Kategori" har: id og cat_rel_to_tool (= id ved pkt.1)
3) "Emne" har hhv: id, sc_rel_to_tool (= id ved pkt.1) og sc_rel_to_cat (= id ved pkt.2)

Ok, jeg ønsker at liste emner i stil med:

Værktøj 1
- Kategori 1
- - Emne 1.1
- - Emne 1.2
- Kategori 2
- - Emne 2.1
Værktøj 2
- Kategori 1
- - Emne 1.1
osv.

Er løsningen virkelig først at loope gennem databasen for at få trukket værktøjerne ud, hvorefter jeg INDE i dette while laver endnu et loop til kategorierne, hvorefter jeg igen INDE i det andet while nu laver et tredje loop og laver et while med emnerne eller kan det grupperes på en eller anden måde?
Avatar billede jakobdo Ekspert
23. februar 2011 - 12:58 #1
Du kan lave et stort udtræk med:

SELECT v.*,k.*,e.* FROM Værktøj v INNER JOIN Kategori k ON v.id = k.cat_rel_to_tool INNER JOIN Emne e ON k.id = e.sc_rel_to_cat

Så kræver der bare en korrekt sortering og noget php, som så tjekker hvornår data skal "rykkes" ind eller ej.
Avatar billede Slettet bruger
23. februar 2011 - 13:51 #2
Hej, jeg har fået den til at lave udtrækket, men forstår ikke helt det med sorteringen du snakker om, nu samler den ikke - men laver blot:

Værktøj 1
- Kategori 1
- - Emne 1.1
Værktøj 2
- Kategori 2
- - Kategori 2.1
Værktøj 2
- Kategori 2
- - Kategori 2.2
osv.
Avatar billede Slettet bruger
23. februar 2011 - 19:45 #3
Hej, jeg knokler videre - og den er der næsten, kan du gennemskue, hvordan jeg kan få <lu> til at stå rigtigt omkring $cat_name_dk, - så tror jeg, den er der:


$tmp_cat = '';
$tmp_tool = '';
$tmp_sc = '';
    while ($row = mysql_fetch_array($sql ))
    {
...

if($tmp_tool != $tool_id){
echo "<br><font size=3><b>".$tool_name."</b></font><br>";
$tmp_tool = $tool_id; //update the tmp variable
}

if($tmp_cat != $cat_id){
echo "".$cat_name_dk."";
$tmp_cat = $cat_id; //update tmp variable
}

if($tmp_sc != $sc_id){
echo "<li><a href='view.php?id=".$sc_id."'>".$sc_desc_dk."</a></li>";
$tmp_sc = $sc_id; //update tmp variable
}
Avatar billede jakobdo Ekspert
23. februar 2011 - 20:11 #4
Er problemet ikke du kommer til at mangle en </li> på den måde ?

Du skal jo i bund og grund have en <li>, hver gang tool_id eller cat_id ændres.
Men du skal også have en sat retur igen.
Jeg tror desværre ikke jeg kan hjælpe mere, uden at have noget live data at teste på.
Avatar billede Slettet bruger
23. februar 2011 - 20:40 #5
Mjah, jeg tror jeg klarer den med css i stedet... Hvis du vil svare - så smider jeg pointene af sted. Tak for hjælp/input!
Avatar billede jakobdo Ekspert
23. februar 2011 - 20:45 #6
Svar!
Avatar billede jakobdo Ekspert
23. februar 2011 - 21:46 #7
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester