Prijslijst overzicht en alleen laagste prijs laten zien.
Ik heb een lijst met producten die meerdere prijzen kunnen hebben. Nu wil ik een overzicht van alle producten en die producten die meerdere prijzen hebben alleen de goedkoopste prijs laten zien (vanaf 1,00)
IPV
Appels 1,00
Appels 2,00
Appels 3,75
--
Appels vanaf 1,00
Ik heb dit als select van de tabel
sql = "SELECT * FROM producten GROUP BY artikel_id ORDER BY prijs DESC";
De tabel "PRODUCTEN" bestaat uit
product_id
artikel_id
prijs
omschrijving
Het lukt me niet om de laagste prijs te laten zien. Wat doe ik niet goed?
IPV
Appels 1,00
Appels 2,00
Appels 3,75
--
Appels vanaf 1,00
Ik heb dit als select van de tabel
sql = "SELECT * FROM producten GROUP BY artikel_id ORDER BY prijs DESC";
De tabel "PRODUCTEN" bestaat uit
product_id
artikel_id
prijs
omschrijving
Het lukt me niet om de laagste prijs te laten zien. Wat doe ik niet goed?
Hoe sla je het op in de database? En wat voor veldtype?
Ik neem aan dat je het niet met een komma opslaat? Want daar kan MySQL niet mee rekenen.
Ik neem aan dat je het niet met een komma opslaat? Want daar kan MySQL niet mee rekenen.
Gewijzigd op 08/08/2016 13:44:23 door - Ariën -
query's met "SELECT *" en "GROUP BY"
Dat is eigenlijk altijd fout, ook al geeft Mysql wel vaak een antwoord dat min of meer toevallig is, wat je wilde hebben.
Dat is eigenlijk altijd fout, ook al geeft Mysql wel vaak een antwoord dat min of meer toevallig is, wat je wilde hebben.
- Ariën - op 08/08/2016 13:43:47:
Hoe sla je het op in de database? En wat voor veldtype?
Ik neem aan dat je het niet met een komma opslaat? Want daar kan MySQL niet mee rekenen.
Ik neem aan dat je het niet met een komma opslaat? Want daar kan MySQL niet mee rekenen.
Nee de prijs is: decimal(7,2)
Toevoeging op 08/08/2016 14:11:24:
En voor de alias (minprijs) kun je ook een naam die jou leuk lijkt kiezen. Kies echter bij voorkeur niet "prijs" aangezien dat ook de naam van een kolom is. En dat geeft soms onverwachte resultaten bij sorteren.
En mocht je naast de artikel_id ook nog andere kolommen willen hebben:
dat kan, maar dan moet je die óók in het stuk GROUP BY toevoegen
Dit werkt inderdaad helemaal goed. Maar nu heb ik nog een vraag. Ik heb van de artikelen soms 0.00 staan en dat is dan dat de prijs op aanvraag is. Maar stel dat ik meerdere prijzen heb waaronder ook 0.00 dan wil ik eigenlijk de tweede prijs zien.
Voorbeeld
Appels 0.00
Appels 3.00
Appels 2.75
Nu laat hij dan zien:
Appels 0.00
Maar ik wil eigenlijk dan de eerste volgende dus
Appels 2.75
Hoe krijg ik dat voor elkaar?!
Voorbeeld
Appels 0.00
Appels 3.00
Appels 2.75
Nu laat hij dan zien:
Appels 0.00
Maar ik wil eigenlijk dan de eerste volgende dus
Appels 2.75
Hoe krijg ik dat voor elkaar?!
Gewijzigd op 08/08/2016 17:24:24 door Kees Mulder
als er geen echte prijs is, dan lijkt me NULL beter dan 0
Maar ik snap niet helemaal waarom de prijs dan op aanvraag kan zijn, terwijl er ook een tweede prijs is?
Toevoeging op 08/08/2016 17:35:22:
(en zie hier ook een reden om de alias niet "prijs" te maken
Maar ik snap niet helemaal waarom de prijs dan op aanvraag kan zijn, terwijl er ook een tweede prijs is?
Toevoeging op 08/08/2016 17:35:22:
Code (php)
1
2
3
4
2
3
4
SELECT artikel_id, MIN(prijs) AS minprijs
FROM producten
WHERE prijs > 0
GROUP BY artikel_id
FROM producten
WHERE prijs > 0
GROUP BY artikel_id
(en zie hier ook een reden om de alias niet "prijs" te maken




