Ik heb een database met de volgende tabel: Bestellingen.
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.

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

<?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;
?>

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

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?
- 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.

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.


SELECT 
  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.
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.
En om de service compleet te maken nog even de url naar de tutorial over normalisatie.

Reageren