ugrás a tartalomhoz

Egyedi sorrend meghatározása

OMagus · 2011. Jún. 21. (K), 12.02
Sziasztok,

láttam a többi hasonló kérdést a témakörben, de nem fedik az én problémámat sajnos.
A többi fórumtéma azt feltételezi, hogy a sorrend (minimális mértékben is, de) függ az id-tól, és/vagy admin oldalon lehessen a sorrendet állítani.

Az én problémám sajnos összetettebb.
Adott egy készlet kezelő program (PHP-MySQL). Név, készlet, raktárpolc, paraméterek, stb.
A paraméterek közt a méret a döntő jelen esetünkben. A méreteket sajnos vegyesen akarják tárolni európai, angol és szabadszavas (!) formában. Tehát például lehet benne 39,40,41,42 stb méret, valamint a feles méretekre a 4-,6-,5-, stb. És vannak ezeken felül olyan "méretek", hogy kicsi, közepes, nagy, stb.

Mindez egy táblában egyazon mezőben, nincs kapcsolótábla (sajnos). Mivel a rendszer közel 50 táblával dolgozik, rengeteg összekapcsolással, és ezeket (csak amik a termékekkel dolgoznak) közel 100 php fájl kezeli, ezért már nem is könnyen oldható meg a kapcsolótábla bevezetése.

Alapesetben az "ORDER BY size ASC" jó is lenne még a kicsi-közepes-nagy esetén is, de problémát okoz a 1,11,12,13 ... 2,21,22 .. 3,31, stb és a 4-,4,5-,5 sorrendek, mert az 5 az kisebb méret, mint az 5-, de (nem tudom miért) az "5-" előbb listázódik az "5"-nél, illetve vannak olyan (alfabetikus) méretetek, amik az ABC szabályai szerint nem következetesek.

Remélem sikerült átadnom a problémámat... Erre az esetre van valakinek valami tippje, ötlete?

Köszönöm előre is!
 
1

Ha minden különböző méretet

Hidvégi Gábor · 2011. Jún. 21. (K), 12.14
Ha minden különböző méretet átkonvertálsz egy bizonyos típusúra, akkor már tudsz rá rendezni.
2

de sajnos nem tehetem

OMagus · 2011. Jún. 21. (K), 12.36
de sajnos nem tehetem, mert a raktárosok és az ügyintézők ezeken a méreteken keresik a termékeket, így ismerik őket, és ráadásul szabadszavas input mező áll a rendelkezésükre, így bármikor tetszőleges új méretet tudnak bírni
4

Ennyire vegyes adatokat

kuka · 2011. Jún. 21. (K), 13.08
Ennyire vegyes adatokat összehasonlítani tárolt eljárásban lehetne kényelmesebben. De akkor minden egyes hozzájuk nyuláskor lefutna a tárolt eljárás, ami fölösleges.

Tehát a fentit ötvözném Hidvégi Gábor javaslatával:
  • plusz egy mezõ amibe egy közös mértékegységre konvertálva beírod úgyanazt a méret adatot
  • trigger az eredeti szerkeszthetõ méret mezõre, ha változik újra kiköbözi a közös mértékegységû méret mezõ értékét
  • az õsszes lekérdezésben átírod az order by-t az új mezõre
3

Új mező

Poetro · 2011. Jún. 21. (K), 13.08
SELECT size FROM tabla ORDER BY LENGTH(size), size
vagy
SELECT size FROM tabla ORDER BY size + 0
Ám fel kell készülni, hogy ez a rendezés nagyon lassú lesz, így érdemes lenne készíteni még egy mezőt, amiben natsort algoritmus szerint eltárolsz egy számot, ami az illető sorrend értéke.
5

Köszönöm

OMagus · 2011. Jún. 22. (Sze), 15.17
Köszönöm a válaszokat, megkaptam a kívánt választ, már csak a megvalósítás van hátra ...