menu met subitems uit database ophalen
Ik ben bezig een boomstructuur te maken, waarvoor dus items gerangschikt worden onder een hoofditem.
Ik bedoel dus zoiets als:
fotos 2015:
fotos mei
fotos juli
fotos september
fotos 2014:
fotos augustus
fotos 2013
etc.
Nou heb ik dus al wel dat ik alles uit de database kan halen, maar ik krijg het niet voor elkaar om de subcategorie te rangschikken bij de hoofdcategorie.
In de database heb ik elk item opgeslagen met een id, de hoofdcategorie en de subcategorie (dus 3 kolommen)
Dit is wat ik heb:
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
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
<?php
try {
//Connect to the dBase
require_once ('../data/sql_link_frans.php');
//Make a select-query to show the comments
$sql_select = "SELECT titel,
link
FROM fotomappen
ORDER BY titel";
$stmt = $db->prepare($sql_select);
$stmt -> execute(array());
$results = $stmt->fetchAll();
?>
<dl class="leftmenu">
<?php foreach ($results as $result) { ?>
<dt><?php echo $result['titel']; ?></dt>
<dd><a href="<?php echo $result['link']; ?>"><?php echo $result['link']; ?></a></dd>
<?php
}
?>
</dl>
<?php
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
echo 'Iets gaat niet goed. ';
}
?>
try {
//Connect to the dBase
require_once ('../data/sql_link_frans.php');
//Make a select-query to show the comments
$sql_select = "SELECT titel,
link
FROM fotomappen
ORDER BY titel";
$stmt = $db->prepare($sql_select);
$stmt -> execute(array());
$results = $stmt->fetchAll();
?>
<dl class="leftmenu">
<?php foreach ($results as $result) { ?>
<dt><?php echo $result['titel']; ?></dt>
<dd><a href="<?php echo $result['link']; ?>"><?php echo $result['link']; ?></a></dd>
<?php
}
?>
</dl>
<?php
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
echo 'Iets gaat niet goed. ';
}
?>
Uit de PHP.net website heb ik begrepen dat ik dit zou moeten gebruiken:
$results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
Als ik dit met een var_dump laat verschijnen komt er inderdaad de juiste array op het scherm, maar ik kom er maar niet achter hoe ik het in mijn script moet verwerken.
Kan iemand me uitleggen hoe dit te doen?
Edit: Niet zeker hoor en niet getest. Ik gebruik PDO zelden.
Gewijzigd op 08/09/2015 18:36:24 door DavY -
Ja, dank DavY, zo ver was ik dus al. En dan?
EDIT: in mijn PHP versie werkt PDO::FETCH_COLUMN|PDO::FETCH_GROUP niet echt intuitief, lijkt alleen te werken als je 2 kolommen ophaalt en negeert de kolom(men) waar deze op zou moeten groeperen.
Ik denk dat het een stuk makkelijker is om een "volgorde" kolom toe te voegen en de logica voor weergave maar tijdens het afdrukken (on-the-fly) te regelen.
EDIT2: wellicht werkt PDO::FETCH_ASSOC|PDO::FETCH_GROUP beter, waarbij de eerste kolom die je ophaalt met je SELECT statement de kolom is waar je op groepeert.
Gewijzigd op 08/09/2015 22:22:51 door Thomas van den Heuvel
Het zou mooi zijn als je, mocht je er tijd voor hebben, iets voor kan maken waarmee je objecten kan maken en die in mijn tool te gooien.
http://www.delistio.us
De var_dump van $results = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
geeft dit als resultaat:
array (size=2)
'Mojacar en omgeving' =>
array (size=3)
0 => string 'sorbas' (length=6)
1 => string 'Desierto del Wild West' (length=22)
2 => string 'Mojacar' (length=7)
'Vrienden en feesten' =>
array (size=1)
0 => string 'Benji' (length=5)
Dit is precies wat ik wil, maar dan zonder de array dingen natuurlijk. Dus volgens mij zou dit wel kunnen werken, als ik maar wist hoe ik deze gegenereerde array naar een leesbare tekst omzet.
Een idee, of zie ik dit dan echt te makkelijk.
Gewijzigd op 09/09/2015 14:25:31 door tortuga web
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// voorbeeld structuur, zoals je die min of meer van PDO terugkrijgt
$items = array(
'Mojacar en omgeving' => array(
'sorbas',
'Desierto del Wild West',
'Mojacar',
),
'Vrienden en feesten' => array(
'Benji',
),
);
// de dubbele for-loop
foreach ($items as $map => $submappen) {
?><h1><?php echo $map ?></h1><?php
foreach ($submappen as $submap) {
?><h2><?php echo $submap ?></h2><?php
}
}
?>
// voorbeeld structuur, zoals je die min of meer van PDO terugkrijgt
$items = array(
'Mojacar en omgeving' => array(
'sorbas',
'Desierto del Wild West',
'Mojacar',
),
'Vrienden en feesten' => array(
'Benji',
),
);
// de dubbele for-loop
foreach ($items as $map => $submappen) {
?><h1><?php echo $map ?></h1><?php
foreach ($submappen as $submap) {
?><h2><?php echo $submap ?></h2><?php
}
}
?>
Of had je iets anders/ingewikkelders voor ogen?
Wederom hartelijk dank. Dit was de oplossing voor wat ik zocht.
Voorlopig heb ik niks ingewikkelders voor ogen. Dat gaat een weer veel later volgend project worden.