Hulp gevraagd bij lastige queries

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcel K

Marcel K

13/05/2007 19:50:00
Quote Anchor link
Hallo allemaal, ik ben bezig om een poging te doen om een webshop te bouwen maar loop vast bij een paar queries.

Ik zal eerst even mijn tabellen plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php

--
--
Tabel structuur voor tabel `cat_main`
--

CREATE TABLE `cat_main` (
  `main_id` int(11) NOT NULL auto_increment,
  `cat_desc` varchar(35) NOT NULL default '',
  PRIMARY KEY  (`main_id`)
)
ENGINE=MyISAM  DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
--
Tabel structuur voor tabel `cat_sub`
--

CREATE TABLE `cat_sub` (
  `subcat_id` int(11) NOT NULL auto_increment,
  `main_id` int(11) NOT NULL default '0',
  `cat_desc` varchar(35) NOT NULL default '',
  PRIMARY KEY  (`subcat_id`)
)
ENGINE=MyISAM  DEFAULT CHARSET=utf8;

------------------------------------------------------------
--
--
Tabel structuur voor tabel `advertentie`
--

CREATE TABLE `advertentie` (
  `id` int(11) NOT NULL auto_increment,
  `maincat` int(11) NOT NULL,
  `subcat` int(11) NOT NULL,
  `member_id` int(11) NOT NULL,
  `mtype` enum('p','z') NOT NULL default 'p',
  `shortdesc` varchar(50) NOT NULL,
  `longdesc` longtext NOT NULL,
  `prijs` int(11) NOT NULL default '5',
  `foto` varchar(50) NOT NULL,
  `thumb` varchar(50) NOT NULL,
  `fdatum` datetime NOT NULL,
  PRIMARY KEY  (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8;

?>


In de tabel `cat_main` staan mijn hoofdcategorie-en, in `cat_sub` de subcategorie-en en advertentie uiteraard de advertenties.

Klik ik in het menu op een hoofcategorie dan moet in het venster alle subcategorie-en openen met bij elke subcategorie de bijbehorende advertenties. Niet alle advertenties uiteraard, maar dat is te begrenzen door een LIMIT, dat is geen probleem.

ik heb het volgende maar dat gaat niet goed:

Edit: $cat komt uit een $_GET bij aanroep van het script.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

$sql
= "SELECT subcat_id, cat_desc FROM cat_sub WHERE main_id='".$cat."'";
       if ( !($result = $db->sql_query($sql)) )
        {

                die('Could not obtain categorie information');
        }

    $main_rows = array();
    while ($row = $db->sql_fetchrow($result))
    {

        $main_rows[] = $row;
    }

    $numcats = mysql_num_rows($result);
    for ($i=0; $i<$numcats; $i++) {

        $sql2 = "SELECT id, shortdesc FROM advertentie WHERE subcat='".$main_rows[$i]['subcat_id']."'";
        if ( !($result2 = $db->sql_query($sql2)) )
        {

                die('Could not obtain advertisement information');
        }

        $sub_rows = array();
        while ($row2 = $db->sql_fetchrow($result2))
        {

            $sub_rows[] = $row2;
        }

        $aantal = count($sub_rows);

    }


?>


De resultaten stuur ik door naar Smarty.

Het resultaat van bovenstaande is dat ik alle subcategorie-en te zien krijg maar in iedere sub-categorie dezelfde advertenties.
Hoe kan ik dit oplossen ?

Alvast eventueel bedankt voor wat hulp in de goede richting.
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
 
PHP hulp

PHP hulp

13/07/2024 15:39:35
 
- SanThe -

- SanThe -

13/05/2007 20:09:00
Quote Anchor link
In de loop
for ($i=0; $i<$numcats; $i++) {
vul je eigenlijk alleen maar steeds hetzelfde array() en dat heeft als resultaat dat er alleen de laatste gegevens in zitten.
 
Marcel K

Marcel K

13/05/2007 20:35:00
Quote Anchor link
Damn ! Je hebt gelijk Santhe, helemaal overheen gekeken :P
Nu eens kijken hoe ik het dan anders aan moet pakken
 
Marcel K

Marcel K

14/05/2007 20:17:00
Quote Anchor link
Bump.
Ik zie het momenteel even niet, kan iemand mij svp even op weg helpen ?
 
Jason de Ridder

Jason de Ridder

14/05/2007 20:43:00
Quote Anchor link
Binnen 24 uur bumpen..., nee grapje ;)

Kijk eens naar de functie array_push().
 
Marcel K

Marcel K

14/05/2007 20:49:00
Quote Anchor link
Sorry Jason, 18 minuten te vroeg, zal er de volgende keer een wekker naast leggen :P

Ik zal eens gaan kijken naar array_push, tnx.

Oeps.. mocht ik wel gelijk een reply geven ?? (blush)
 
Jelmer -

Jelmer -

14/05/2007 21:39:00
Quote Anchor link
Edit: tuurlijk mag je reply'en. Het zou anders wel heel belachelijk worden hier nietwaar?

array_push is gewoon '[]' in een functie :) Niets speciaals.

Zoals SanThe al zei, regel 21 van het script dat je hierboven plaatste, '$sub_rows = array();' is de boosdoener.

Je kan er voor kiezen om ze allemaal onder elkaar te zetten, en dus $sub_rows niet iedere ronde opnieuw te definieren, maar alleen maar aan te vullen. Of je kan een multidimentionale array maken met op het eerste niveau de categorieën en op het 2e niveau de advertenties (per categorie)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
    $advertenties
= array();
    for... {
        ...
je code
        
        $advertenties[] = $sub_rows;
        // of
        array_push($advertenties, $sub_rows);
        // maar dat is ietsjes langzamer, aangezien [] precies hetzelfde doet, maar dan zonder de functie-call.
    }
        
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.