SELECT DISTINCT(p.productID) as productID,p.categorieID,p.kortingID,p.leverID,p.titel,p.url,p.prijs,p.promoprijs,p.foto,p.nieuw,p.omschrijving, p.volgorde, p.doorlopend
FROM product p
INNER JOIN stock s ON s.productID = p.productID
INNER JOIN korting k ON k.id = p.kortingID
INNER JOIN merken m ON p.merkID = m.id
INNER JOIN seizoen sz ON sz.seizoenID = p.seizoenID
WHERE p.overzicht=1 AND p.modelID = '5'AND p.merkID = '147' AND p.verwijderd=0 AND p.outlet=0 AND p.actief=1 AND s.verkocht=0 AND s.schoenmaat IN (23)
ORDER BY
CASE -- sort via cases: nieuw, doorlopend, discounted (where discounted always come last even when new is most likely still falsily set)
WHEN p.nieuw = 1 AND (p.promoprijs IS NULL OR p.promoprijs = 0) AND (p.kortingID IS NULL OR p.kortingID = 98) THEN 1 -- new, no discounts (kortingID 98 = 'geen korting' group)
WHEN p.doorlopend = 1 THEN 2 -- doorlopend/continuous
WHEN p.promoprijs IS NOT NULL OR p.promoprijs != 0 OR (p.kortingID IS NOT NULL AND p.kortingID != 98) THEN 3 -- discounted
ELSE 4
END,
m.volgorde ASC,
p.volgorde ASC