Top 10 ectie uit database
Deze tabel wil ik dmv de volgende velden: Artikelen en Aantallen laten sorteren op het meest gekozen/bestelde product.
Aangezien het makkelijker was om de gekozen artikelen + aantallen direct te plaatsen vanuit de winkelmand naar de uiteindelijke bestelling, worden ze op de volgende wijze geplaats in de database (velden):
- Order_ID: Nieuw automatisch ordernummer,
- Artikel_ID: Gekozen artikelen achter elkaar onderscheiden door ';' (dus bv: 14;9;2;11)
- Aantal: Aantallen acher elkaar onderscheiden door ';' (dus bv: 1,2,1,3) Deze hebben dezelfde volgorde als artikelen. Dus artikel_ID 9 is 2 keer besteld.
Nu wil ik de artikelen laten sorteren op meest gekozen (eerste 10)
Tot nu toe heb ik dit maar ik kom er niet echt verder uit.
---------------------------------------------------
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
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
<?php
$query = mysql_query ("SELECT * FROM Bestellingen");
while ($result = mysql_fetch_array($query)){
$Artikel_ID = $result['Artikel_ID'];
$Aantal = $result['Aantal'];
$Order_ID = $result['Order_ID'];
$array_art = explode(";", $Artikel_ID);
$array_aantal = explode(";", $Aantal);
$c = count ($array_art)-1;
echo $Order_ID;
for($i=0; $i<$c; $i++){
$value1 = $array_art[$i];
$value2 = $array_aantal[$i];
$optelsom .= "-".$value1;
echo "Value: $value1 - $value2";
}
echo "<br>";
echo "<br>";
}
echo $optelsom;
?>
$query = mysql_query ("SELECT * FROM Bestellingen");
while ($result = mysql_fetch_array($query)){
$Artikel_ID = $result['Artikel_ID'];
$Aantal = $result['Aantal'];
$Order_ID = $result['Order_ID'];
$array_art = explode(";", $Artikel_ID);
$array_aantal = explode(";", $Aantal);
$c = count ($array_art)-1;
echo $Order_ID;
for($i=0; $i<$c; $i++){
$value1 = $array_art[$i];
$value2 = $array_aantal[$i];
$optelsom .= "-".$value1;
echo "Value: $value1 - $value2";
}
echo "<br>";
echo "<br>";
}
echo $optelsom;
?>
-------------------------------------------
Volgens mij zit ik helemaal fout en kan het veel makkelijker.
Ik wil in principe gewoon de(zelfde) artikel_ID's tellen en multipliceren met het aantal.
Stel ik heb dit in de database staan:
Artikel_ID: 14;12;9;12;9;5;14;12
Aantal: 1;1;2;1;2;1;1;1
Dan ik even een simpele weergave die onderussen onthouden moet worden:
14 12 9 9 12 9 9 5 14 12
Vervolgens
9 (4x)
12 (3x)
14 (2x)
5 (1x)
Als ik deze artikelen eenmaal in deze volgorde heb, dan kan ik zo de bijhorende artikelen uit de artikelen tabel oproepen.
ZOUDEN JULLIE MIJ KUNNEN HELPEN?
Quote:
- Artikel_ID: Gekozen artikelen achter elkaar onderscheiden door ';' (dus bv: 14;9;2;11)
- Aantal: Aantallen acher elkaar onderscheiden door ';' (dus bv: 1,2,1,3) Deze hebben dezelfde volgorde als artikelen. Dus artikel_ID 9 is 2 keer besteld.
- Aantal: Aantallen acher elkaar onderscheiden door ';' (dus bv: 1,2,1,3) Deze hebben dezelfde volgorde als artikelen. Dus artikel_ID 9 is 2 keer besteld.
Dat is een heel slecht datamodel... Helaas, uithuilen en opnieuw beginnen is de enige echte oplossing. Ieder artikel staat in zijn eigen record. Wanneer een artikel in 1 bestelling meerdere keren voorkomt, dan zit je dit in de kolom 'aantal'.
Wanneer je het datamodel goed hebt, kun je met SUM() vrij eenvoudig per artikel opvragen hoevaak deze is besteld.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
artikel,
SUM(aantal) as besteld
FROM
tabelnaam
GROUP BY
artikel
ORDER BY
aantal DESC
LIMIT 10
artikel,
SUM(aantal) as besteld
FROM
tabelnaam
GROUP BY
artikel
ORDER BY
aantal DESC
LIMIT 10
Edit: Nog even de top-10 in de query gezet. Met ASC kun je oplopend sorteren.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Dit is een slecht datamodel omdat je meer dan één waarde in een veld stopt. Dat maakt het erg lastig om er dit soort dingen uit te laten rollen.