Hogyan kell helyesen sorba rendezni a karakterláncot a mysql számokkal
- MySQL
Kedves napszak. Egy áruház fejlesztésében találkoztam azzal a problémával, hogy névtelenül sorolják az árukat, ha van egy számuk a névben.
A rendelkezésre álló adatok: MySQL adatbázis és terméktáblázat névmezővel.
Az áruk nevében több szám is lehet, és mindegyik lehet a vonal különböző pontjain. Íme egy példa:
A normál rendezés (ORDER BY ASC név) alapján a következő listát kapom:
Az árukat az első betűk sorba rendezik, amelyek a számokig terjednek, majd klasszikus sorszámozás történik: 13, 16, 9 és 10, 14, 9. Összehasonlítás csak az első számjegyen történik, így a 9 a 10-es és annál magasabb értékek között van.
Mi a probléma: mivel ezek a számok bárhol megtalálhatók a sorban, félkör alakú zárójelben lehetnek. Mivel a terméknévben található számok bárhol megtalálhatóak, a SUBSTRING_INDEX változatok mindegyike leesik. Még arra sem gondolok, hogy a reguláris kifejezések segíthetnek-e itt. Kiderül, hogy olyan rendezést kell létrehoznod, amely minden szó után a szóközt eltárolja, és egy sztringként vagy számként hasonlítja össze.
Abban a pillanatban úgy döntöttem, hogy ez a kérdés brutális mankó. Amikor kiválasztottam az elemet, levágtam a zárójeleket, és létrehoztam egy másik változót named_order néven, így a jövőben nem kellett megszabadulnom a zárójelektől:
Ezt követően létrehoztam a SPLIT_STR függvényt. amely a változót egy térrel vágja le. Végül a legrosszabb az, hogy a termék nevét külön szavakra és számokra kell vágni, ennek a "tömbnek" minden egyes elemét CAST-on keresztül számba kell hozni, és ennek eredményeképpen nagyszámú változót kell rendezni:
Amint azt a kódból láthatod, a neveket 12 elemre vágtam egy szóközzel, majd váltakozva minden elemet sorszámként és stringként hasonlítottam össze. Ezzel a fajta válogatással minden tökéletesen működik, csak nehéz megnézni ezt a kódot.
A kérdés az, hogy van-e valaki, ha helyesen és megfelelőbb megoldást talál a probléma megoldására? Saját tapasztalat, vagy legalábbis gondoltam, hogyan lehet ugyanazt a funkciót elvégezni, de még tisztább és gyönyörűbb?
Hálás leszek bármilyen gondolatért! És köszönöm előre))