Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Interesantan SELECT problem

[es] :: Baze podataka :: Interesantan SELECT problem

[ Pregleda: 1323 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

broker

Član broj: 2415
Poruke: 8521
212.62.59.*



Profil

icon Interesantan SELECT problem22.04.2004. u 16:30


Imate tabelu sa poljima ID, LANG, OPIS

Tabela sluzi za "prevodjenje" to jest za isti ID postoji vise slogova sa razlicitim LANG a za svaku vrednost LANG je definisan odgovarajuci OPIS.

Ulazni podaci su vrednosti ID, LANG, LANG_DEFAULT

Potrebno je napraviti upit koji ce iz tabele za dati ID i dati LANG vratiti odgovarajuci slog sa opisom ali ako ne postoji takav slog treba vratiti slog koji odgovara datom ID i datom LANG_DEFAULT.

Prevedeno na srpski: za ID vratiti slog koji daje opis na datom jeziku a ako nije definisan opis za taj jezik vratiti opis na nekom podrazumevanom jeziku.

Treba ovo resiti jednim SELECT upitom.

22.04.2004. u 16:30 

leka
Dejan Lekić
senior software engineer, 3Developers Ltd.
London, UK

Član broj: 234
Poruke: 2530
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


Profil

icon Re: Interesantan SELECT problem22.04.2004. u 17:11
Pretpostavljam iz tvog teksta da verujes da moze da se resi jednim SELECT upitom? Ja naiskrenije ne znam da li ovo moze jednim upitom da se resi...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
22.04.2004. u 17:11 

noviKorisnik

Član broj: 13216
Poruke: 4513
*.dialup.neobee.net.



Profil

icon Re: Interesantan SELECT problem22.04.2004. u 17:36
Code:
SELECT description
FROM translator
WHERE id = '$id'
  AND lang IN ('$lang', '$lang_default')
ORDER BY lang DESC 
LIMIT 1

Ovo radi uz neke pretpostavke o polju lang. Ako je polje lang tipa ENUM i podrazumevani jezik je prvi u listi dozvoljenih vrednosti (ovakva postavka deluje i realno zadovoljavajuća za pretpostavljeni problem).
22.04.2004. u 17:36 

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.beotel.net

Sajt: localhost


Profil

icon Re: Interesantan SELECT problem23.04.2004. u 03:42
ovo radi bez ikakvih pretpostavki (eh, miline LEFT JOINa.. ;)

Code:
SELECT ifnull(sel.text, def.text) AS text
FROM trans AS def LEFT JOIN trans AS sel
ON sel.lang='$LANG' AND sel.id=def.id 
WHERE def.lang='$LANG_DEF' AND def.id='$ID'


sel je tabela za selektovani jezik, def za default. ostalo je valjda jasno..

// btw: ovo je za forum baze..

23.04.2004. u 03:42 

noviKorisnik

Član broj: 13216
Poruke: 4513
194.247.222.*



Profil

icon Re: Interesantan SELECT problem23.04.2004. u 07:26
Dobar taj IFNULL() !!
23.04.2004. u 07:26 

broker

Član broj: 2415
Poruke: 8521
212.62.59.*



Profil

icon Re: Interesantan SELECT problem23.04.2004. u 12:23
Zadovoljan sam da me je intuicija ipak dobro vodila :) Verovao sam da resenje postoji iako ga ja nisam video.

Resenje sa GROUP BY je ocigledno i moze jednostavnije od ponudjenog, medjutim, problem je sa pretpostavkom redosleda slogova a kao sto znamo kod SQL-a ne postoji nikakva garancija redosleda slogova ako ne postoji ORDER BY (a u ovom slucaju ne postoji nikakav nacin da se poredjaju jezici).

ifnull() sam takodje pokusavao da upotrebim ali na sasvim drugi nacin mada sam bio na dlaku od resenje ali sam bio corav.

Zombi ima 10 poena za dovitljivost :)

Nadam se da ce ovo biti od koriti, iako sam ga stavio samo kao mozgalicu.
23.04.2004. u 12:23 

bzero
dev null
europe

Član broj: 5907
Poruke: 371
195.178.54.*

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Interesantan SELECT problem23.04.2004. u 12:56
Citat:
broker:
Resenje sa GROUP BY je ocigledno i moze jednostavnije od ponudjenog, medjutim, problem je sa pretpostavkom redosleda slogova a kao sto znamo kod SQL-a ne postoji nikakva garancija redosleda slogova ako ne postoji ORDER BY (a u ovom slucaju ne postoji nikakav nacin da se poredjaju jezici).


Moze malo da se sredi i ORDER BY, pa moze ovako:

Code:

SELECT IF(STRCMP(LANG, '$lang_default'),0,1) AS orderby, OPIS 
FROM tabela 
WHERE ID='$id' AND (LANG='$lang' OR LANG='$lang_default') 
ORDER BY orderby LIMIT 1


Never trust an operating system you don't have sources for.
23.04.2004. u 12:56 

broker

Član broj: 2415
Poruke: 8521
212.62.59.*



Profil

icon Re: Interesantan SELECT problem24.04.2004. u 09:31
Vrlo dovitljivo :)
24.04.2004. u 09:31 

leka
Dejan Lekić
senior software engineer, 3Developers Ltd.
London, UK

Član broj: 234
Poruke: 2530
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


Profil

icon Re: Interesantan SELECT problem24.04.2004. u 10:10
Bravo, ja nisam znao za IFNULL() takodje. Sada znam - zahvaljujuci majstorima. :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
24.04.2004. u 10:10 

[es] :: Baze podataka :: Interesantan SELECT problem

[ Pregleda: 1323 | Odgovora: 8 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.