Hallo Iedereen,
ik ben momenteel bezig met het ontwikkelen van een webshop in php en MySQL. nu loop ik tegen een nogal vervelend probleem aan, en heb het niet kunnen oplossen zonder de query enorm te vertragen of via een omweg.
Het Probleem; de productlijst moet gesorteerd worden op "menselijke" logica, dat zou dan betekenen dat iets op de volgende manier gesorteerd wordt:
Memorycard 256MB
Memorycard 512MB
Memorycard 1024MB
Memorycard 2048MB
echter behandeld MySQL het geheel als text ( logisch, omdat het een textveld is ) en sorteert het op deze manier:
Memorycard 1024MB
Memorycard 256MB
Memorycard 2048MB
Memorycard 512MB
ik zocht dus eigenlijk een manier om het op de "menselijke" manier te sorteren in MySQL. er is een mogelijkheid om het in PHP te doen met natcasesort() maar om nou eerst de hele database naar binnen te trekken, en daarna met array's te gaan werken is een bottleneck voor de snelheid en ook niet echt efficiënt.
Nu las ik een tutorial dat het volgende de oplossing bied:
SELECT * FROM `database` ORDER BY `text_field` + 0
dit schopt echter de querytijd om hoog van 0.13 naar 4.75 seconden per query voor een database met 10.000 producten, dus daar zit ik ook niet echt op te wachten.
Misschien heeft iemand ooit een vergelijkbaar probleem gehad, en een oplossing voor mij? Zou zeer gewaardeerd worden!
ik ben momenteel bezig met het ontwikkelen van een webshop in php en MySQL. nu loop ik tegen een nogal vervelend probleem aan, en heb het niet kunnen oplossen zonder de query enorm te vertragen of via een omweg.
Het Probleem; de productlijst moet gesorteerd worden op "menselijke" logica, dat zou dan betekenen dat iets op de volgende manier gesorteerd wordt:
Memorycard 256MB
Memorycard 512MB
Memorycard 1024MB
Memorycard 2048MB
echter behandeld MySQL het geheel als text ( logisch, omdat het een textveld is ) en sorteert het op deze manier:
Memorycard 1024MB
Memorycard 256MB
Memorycard 2048MB
Memorycard 512MB
ik zocht dus eigenlijk een manier om het op de "menselijke" manier te sorteren in MySQL. er is een mogelijkheid om het in PHP te doen met natcasesort() maar om nou eerst de hele database naar binnen te trekken, en daarna met array's te gaan werken is een bottleneck voor de snelheid en ook niet echt efficiënt.
Nu las ik een tutorial dat het volgende de oplossing bied:
SELECT * FROM `database` ORDER BY `text_field` + 0
dit schopt echter de querytijd om hoog van 0.13 naar 4.75 seconden per query voor een database met 10.000 producten, dus daar zit ik ook niet echt op te wachten.
Misschien heeft iemand ooit een vergelijkbaar probleem gehad, en een oplossing voor mij? Zou zeer gewaardeerd worden!
Strava | :-( + ┌(^0^)┘= :-)