Hello!
Firebird-ben szeretném megoldani a következő problémát:
Adott egy táblám, ahol az egyik mező a készlet mozgás típusát adja meg. Konkrétan egy smallint mező, az alábbi jelentésekkel:
0 - bevételezés
1 - selejtezés
2 - kiszállítás
3 - visszaszállítás
4 - egyéb
Nyilván a user felé a szöveges megfelelőt kellene prezentálnom, nem a számkódot.
Van-e rá lehetőség, hogy az SQL lekérdezésben a megfelelő számkódhoz rendeljem a szöveges megfelelőt, vagy muszáj leszek létrehozni egy külön táblát ennek az 5 sornak, amit aztán joinolok?
Esetleg hogy máshogy lehet megoldani, hogy egy szimpla SQL lekérdezésben benne legyen minden rekordnál a kódszám és a szöveges megfelelő is?
Előre is köszi a segítséget!
- 1430 megtekintés
Hozzászólások
Ebben http://www.janus-software.com/fbmanual/manual.php?book=psql&topic=56 találsz rá példát.
- A hozzászóláshoz be kell jelentkezni
Zsír! Pontosan erre volt szükségem!
Köszönöm szépen! :)
- A hozzászóláshoz be kell jelentkezni
Szia,
Látom, hogy már kaptál választ, de szerintem célszerűbb erre egy táblát felvenni és join-olni, mint query-be hardcode-olni. Ha 25 helyen használod és bővíteni kell (mittomén kitalálnak egy sztornózást vagy ilyesmi) akkor 25 helyen kell belenyúlnod, ami egyrészt szopó, másrészt a hibalehetőségek számát növeli.
Más: lehet, hogy adott esetben célszerűbb magát a string-et tárolnod, akár a numerikus ID mellett akár helyette. Igen tudom, normalizálás meg hibalehetőség meg minden, de néha hasznos.
Ugyanakkor ahogy észrevettem a Firebird jobban szereti a subselect-et, mint a join-t
Vagyis egy
select t1.*
,(select field from t2 where t2.id2=t1.id1) "f2"
from t1
gyorsabb tud lenni, mint a
select t1.*, t2.field "f2"
from t1
left join t2 on t2.id2=t1.id1
x
- A hozzászóláshoz be kell jelentkezni
Ha nem nézzük, hogy miben csinálod, csak azt, hogy mit akarsz és DB és SQL, akkor a normális megoldás az, ha van egy paraméter táblád, amiben a numerikus értékek és a nekik megfeleltetett szövegek fel vannak véve. Utána a join.
- A hozzászóláshoz be kell jelentkezni
Nem hiszem. Attól hogy adatbázis még nem kell minden apróságot joinolni, csak felesleges fűtés a gépteremben. Ott van például az ENUM típus vagy a kliens oldali delegate alkalmazása, ahol olyan ikont/szöveget raksz a szám helyére amit akarsz. *szerintem
- A hozzászóláshoz be kell jelentkezni
Szerintem ennek (készletmozgás-típus szöveges megjelenítése) a megoldására legalább 3 megoldás van:
- külön tábla a típusoknak, annak a PK-ját tárolod a készletmozgás rekordokban
- a mozgástípust szövegesen tárolod a készletmozgás rekordokban
- egyedi ID-t (virtuális PK :) tárolsz a táblában, és query-be case-when vagy if struktúrával beletákolod a megfejtést (vagy ugyanez kliens oldalon hardcode-olva).
Szerintem ez utóbbi a legrosszabb megoldás.
- A hozzászóláshoz be kell jelentkezni
Az első megoldás a helyes, a többi időzített bomba valamilyen szempontból.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Ez klasszikusan az az eset, amit egy előrelátó programozó paramétertáblával old meg, mert egyszerű, és rögtön elkészíti a toolt, amivel a paramétertábla karbantartható, ergo ha változás van a paraméterekben, akkor azt egy törlés/módosítás/új felvitel művelettel 2 perc alatt elvégezheti akár az is, aki user szinten lélegzik. Az összes többi kókányolás oda vezet, hogy vagy a programozó fog szívni vele a későbbiekben vagy valaki más.
Az enum típust csak az tudja karbantartani, aki a táblákat definiálja, ergo a jövőbeni munkát így biztosítja magának a készítő, ráadásul egy éles rendszerben újra megcsinálni egy táblát, majd töltögetni bele a régi adatrekordokat...hát...nem csak mysql meg pgsql létezik, vannak ennél kevésbé megengedő adatbáziskezelők is. A másik oldal meg hard code szagú...a rossz iskolapéldája.
- A hozzászóláshoz be kell jelentkezni
Szerintem helyzet függő. Lehetőségként írtam. Ha van 8-10 státusz/típus jelző oszlop, akkor már erősen elgondolkoznék, hogy mit alkalmazzak. Persze kevés adatnál tökmindegy.
A delegate pedig legalább olyan jól használható mint a paraméter tábla. És pont ugyanannyira leprogramozható felhasználói oldalra a típusok törlése/módosítása/felvitele. Viszont egy deka join nem kell utána a lekérdezésekhez.
- A hozzászóláshoz be kell jelentkezni
oké
- A hozzászóláshoz be kell jelentkezni