WebShop Query met Joins?

Pagina: 1
Acties:

  • Online-Gamer
  • Registratie: Juni 2005
  • Laatst online: 26-11-2025
Goedemiddag,

Ik ben op dit moment bezig met een webshop.
Daarvoor heb ik in de pagina een query voor de categorieën en subcategorieën..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$qCats = $Sql->Query("SELECT `id`,`naam` FROM `".PRE."_cats`");

while ( $arrFetch = $Sql->Fetch($qCats) ) {

    $tpl->newBlock('menu_cat');
    $tpl->assign(array(
                'catnaam'   =>  $arrFetch['naam'],
                'number'    =>  $arrFetch['id']));

    $Sql->Query("SELECT `id`,`naam` FROM `".PRE."_subcats` WHERE `catid`='".$arrFetch['id']."'");
    
    while ( $sFetch = $Sql->Fetch( ) ) {
        $tpl->newBlock('menu_subcat');
        $tpl->assign('subcatnaam', $sFetch['naam']);
    }

}

?>


En in de template:

HTML:
1
2
3
4
5
6
7
8
<!-- START BLOCK : menu_cat -->
            <h2><span>{catnaam}</span> <a href="javascript:ShowHide('menu_{number}', 'image_{number}');">[img]"images/plus.jpg"[/img]</a><br style="clear: both;" /></h2>
            <ul id="menu_{number}">
<!-- START BLOCK : menu_subcat -->
                <li><a href="#">{subcatnaam}</a></li>
<!-- END BLOCK : menu_subcat -->
            </ul>
<!-- END BLOCK : menu_cat -->


Die showhide gedoe wordt nog aangepast, niet op letten aub ;)

Maargoed, het probleem is, ik heb nu een while in een while zitten.. Ontzettend veel query's dus als je veel categorieën en subcategorieën hebt.

Nu is mijn vraag, kan ik dit ook in Joins doen? Zoja, hoe doe ik dit?]

Ik dacht zelf aan zoiets:
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT 
    c.`id` AS hcatid,
    c.`naam` AS hcatnaam,
    s.`id` AS scatid,
    s.`naam` AS scatnaam
FROM
    `".PRE."_cats` AS c,
    `".PRE."_subcats` AS s
WHERE
    s.`catid` = c.`id`


Maar ik heb geen idee hoe ik die mooi moet gaan assignen in de tpl.

Alvast bedankt.

Riny

[ Voor 17% gewijzigd door Online-Gamer op 04-07-2006 16:33 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 14-02 22:39

NetForce1

(inspiratie == 0) -> true

Quick-and-dirty:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$prevHCatId = -1;
while ( $arrFetch = $Sql->Fetch($qCats) ) {
    $currHCatId = $arrFetch['hcatid'];
    if ($currHCatId != prevHCatId) {
        $tpl->newBlock('menu_cat');
        $tpl->assign(array(
                    'catnaam'    =>    $arrFetch['hcatnaam'],
                    'number'     =>    $currHCatId));
    }
    $tpl->newBlock('menu_subcat');
    $tpl->assign('subcatnaam', $sFetch['scatnaam']);
}

[ Voor 39% gewijzigd door NetForce1 op 04-07-2006 15:43 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 15-02 20:53

Robtimus

me Robtimus no like you

Online-Gamer schreef op dinsdag 04 juli 2006 @ 11:27:
Ik dacht zelf aan zoiets:
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT 
    c.`id` AS hcatid,
    c.`naam` AS hcatnaam,
    s.`id` AS scatid,
    s.`naam` AS scatnaam
FROM
    `".PRE."_cats` AS c,
    `".PRE."_subcats` AS s
WHERE
    s.`catid` = c.`id`
Waarom niet voor een ECHTE join gaan:
SQL:
1
2
3
4
5
6
SELECT
    c.id AS hcatid,
    c.naam AS hcatnaam,
    s.id AS scatid,
    s.naam AS scatnaam
FROM PRE_cats c LEFT OUTER JOIN PRE_subcats s ON PRE_cats.id = PRE_subcats.catid

Zo werkt het ook voor categorieen zonder subcategorieen.

More than meets the eye
There is no I in TEAM... but there is ME
system specs