waardes groeperen
ik ben bezig met een aantal waardes uit de database op te halen.
Ik wil weten hoevaak er wordt gereserveerd door 2 personen en door 4 personen.
ik heb daarvoor de volgende code: (code om query uit te voeren enzo hebben wij hier aparte functies voor(hier ligt het niett aan))
Wat ik nu krijg als uitkomst is:
Personen : | Aantal:
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
4 personen | 4
4 personen | 4
4 personen | 4
4 personen | 4
Terwijl het eigenlijk als volgt moet komen
Personen : | Aantal:
2 personen | 12
4 personen | 4
Weet iemand wat ik aan mijn code of query moet veranderen?
Alvast bedankt
Ik wil weten hoevaak er wordt gereserveerd door 2 personen en door 4 personen.
ik heb daarvoor de volgende code: (code om query uit te voeren enzo hebben wij hier aparte functies voor(hier ligt het niett aan))
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
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
<?php
$rows = $userdb->q("
SELECT
COUNT(obj2_veritems.id) as aantal
FROM
obj2_veritems
INNER JOIN obj2_veritems_link ON (obj2_veritems.id = obj2_veritems_link.id_veritem)
WHERE
obj2_veritems.vitm_bevestigd=-1
GROUP BY
obj2_veritems_link.id_veritem
ORDER BY
aantal");
foreach ($rows as $row) {
// Hoofdboeker bij de andere boekers optellen
$totaal = $row['aantal']+1;
// Labels voor het aantal personen
if ($totaal == 2) {
$label = "2 personen";
}
if ($totaal == 3) {
$label = "3 personen";
}
if ($totaal == 4) {
$label = "4 personen";
}
}
?>
$rows = $userdb->q("
SELECT
COUNT(obj2_veritems.id) as aantal
FROM
obj2_veritems
INNER JOIN obj2_veritems_link ON (obj2_veritems.id = obj2_veritems_link.id_veritem)
WHERE
obj2_veritems.vitm_bevestigd=-1
GROUP BY
obj2_veritems_link.id_veritem
ORDER BY
aantal");
foreach ($rows as $row) {
// Hoofdboeker bij de andere boekers optellen
$totaal = $row['aantal']+1;
// Labels voor het aantal personen
if ($totaal == 2) {
$label = "2 personen";
}
if ($totaal == 3) {
$label = "3 personen";
}
if ($totaal == 4) {
$label = "4 personen";
}
}
?>
Wat ik nu krijg als uitkomst is:
Personen : | Aantal:
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
2 personen | 2
4 personen | 4
4 personen | 4
4 personen | 4
4 personen | 4
Terwijl het eigenlijk als volgt moet komen
Personen : | Aantal:
2 personen | 12
4 personen | 4
Weet iemand wat ik aan mijn code of query moet veranderen?
Alvast bedankt
Gewijzigd op 08/08/2011 10:05:02 door Maikel B
Je wil zo te zien een totaal van een totaal. Dat gaat inderdaad niet werken zo.
Maar ik begrijp de structuur niet helemaal. Wat staan er voor gegevens in obj2_veritems en obj2_veritems_link?
Maar ik begrijp de structuur niet helemaal. Wat staan er voor gegevens in obj2_veritems en obj2_veritems_link?
in obj2_veritems staan gegevens over de hoofdboekers en bij link staan gegevens over de bijboeker: id van de reservering en id van de relatie.
Het hele systeem is hierop al gebouwd dus kan er niks meer aan veranderen.
Ik hoop echt op een oplossing voor de opbouw zoals ie nu is
Het hele systeem is hierop al gebouwd dus kan er niks meer aan veranderen.
Ik hoop echt op een oplossing voor de opbouw zoals ie nu is
Gewijzigd op 08/08/2011 10:53:48 door Maikel B
Uiteindelijk is er altijd een oplossing. :)
Dus als ik het goed begrijp bestaat er geen regel in tabel obj2_veritems_link als er maar een persoon boekt.
En als je het aantal items in obj2_veritems_link wil tellen (vb: obj2_veritems_link.id), moet je wel een uniek id hebben in deze tabel en heb je obj2_veritems waarschijnlijk niet nodig.
Ik denk toch dat je achteraf nog een keer door de output moet lopen om ze te tellen.
Dit zou voldoende moeten zijn, alleen het aantal is dan natuurlijk altijd een minder dan het aantal geboekte personen.
Misschien heeft iemand anders nog een betere oplossing?
Dus als ik het goed begrijp bestaat er geen regel in tabel obj2_veritems_link als er maar een persoon boekt.
En als je het aantal items in obj2_veritems_link wil tellen (vb: obj2_veritems_link.id), moet je wel een uniek id hebben in deze tabel en heb je obj2_veritems waarschijnlijk niet nodig.
Ik denk toch dat je achteraf nog een keer door de output moet lopen om ze te tellen.
Code (php)
1
2
3
4
2
3
4
SELECT COUNT(ovl.id) as aantal
FROM obj2_veritems_link ovl
GROUP BY ovl.id_veritem
ORDER BY aantal
FROM obj2_veritems_link ovl
GROUP BY ovl.id_veritem
ORDER BY aantal
Dit zou voldoende moeten zijn, alleen het aantal is dan natuurlijk altijd een minder dan het aantal geboekte personen.
Misschien heeft iemand anders nog een betere oplossing?
een reservering heeft altijd minimaal 2 mensen.
Dus 1 hoofdboeker en 1 bijboeker.
Alleen kunnen er ook meerdere bijboekers zijn.
Ik wacht met smacht op meerdere antwoorden en alle beetjes helpen ;)
Dus 1 hoofdboeker en 1 bijboeker.
Alleen kunnen er ook meerdere bijboekers zijn.
Ik wacht met smacht op meerdere antwoorden en alle beetjes helpen ;)
Voorlopig zou je het zo kunnen doen.
Of zoiets..
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
...
$totaal = array();
foreach ($rows as $row) {
$totaal[$row['aantal']] = isset($totaal[$row['aantal']]) ? $totaal[$row['aantal']]+1 : 1;
}
foreach ($totaal as $personen => $aantal) {
print "Personen: $personen Aantal: $aantal <br>";
}
$totaal = array();
foreach ($rows as $row) {
$totaal[$row['aantal']] = isset($totaal[$row['aantal']]) ? $totaal[$row['aantal']]+1 : 1;
}
foreach ($totaal as $personen => $aantal) {
print "Personen: $personen Aantal: $aantal <br>";
}
Of zoiets..




