Hulp gevraagd bij lastige queries
Ik zal eerst even mijn tabellen plaatsen:
Code (php)
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
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;
?>
--
-- 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)
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
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);
}
?>
$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
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.
Nu eens kijken hoe ik het dan anders aan moet pakken
Ik zie het momenteel even niet, kan iemand mij svp even op weg helpen ?
Ik zal eens gaan kijken naar array_push, tnx.
Oeps.. mocht ik wel gelijk een reply geven ?? (blush)
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)
1
2
3
4
5
6
7
8
9
10
11
12
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.
}
?>
$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 -