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

Interesantan SELECT problem

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

[ Pregleda: 3494 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+10 Profil

icon Interesantan SELECT problem22.04.2004. u 16:30 - pre 197 meseci

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.

 
Odgovor na temu

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

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

Sajt: dejan.lekic.org


+2 Profil

icon Re: Interesantan SELECT problem22.04.2004. u 17:11 - pre 197 meseci
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
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

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

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Interesantan SELECT problem22.04.2004. u 17:36 - pre 197 meseci
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).
 
Odgovor na temu

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

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

Sajt: localhost


+4 Profil

icon Re: Interesantan SELECT problem23.04.2004. u 03:42 - pre 197 meseci
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..

 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Interesantan SELECT problem23.04.2004. u 07:26 - pre 197 meseci
Dobar taj IFNULL() !!
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+10 Profil

icon Re: Interesantan SELECT problem23.04.2004. u 12:23 - pre 197 meseci
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.
 
Odgovor na temu

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 - pre 197 meseci
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.
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+10 Profil

icon Re: Interesantan SELECT problem24.04.2004. u 09:31 - pre 197 meseci
Vrlo dovitljivo :)
 
Odgovor na temu

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

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

Sajt: dejan.lekic.org


+2 Profil

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

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

[ Pregleda: 3494 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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