[ MilošV @ 26.02.2004. 08:20 ] @
Cao :)
Problem je sljedeci:
Kod query-ja
"SELECT KOLONA1 FROM TABELA1 ORDER BY ID DESC"
sortiranje radi kako treba (ID je auto_increment -redni broj upisa)
Kad stavim
"SELECT DISTINCT KOLONA1 FROM TABELA1 ORDER BY ID DESC"
sortira ga potpuno nelogicno (najveci ID je negdje na sredini)
Ista stvar se desava kad umjesto ID stavim da sortira po datumu upisa (timestamp-u)

Sto sam uradio, gdje sam pogrijesio? :)

//napomena: ovo sa nedozvoljavanjem da naslov teme bude makar dijelom ispisan velikim slovima je prilicno naporno :(
[ noviKorisnik @ 26.02.2004. 09:43 ] @
Citat:
How MySQL Optimises DISTINCT

DISTINCT is converted to a GROUP BY on all columns, DISTINCT combined with ORDER BY will in many cases also need a temporary table.

MySQL uzima prvu pojavu vrednosti KOLONA1 i vezuje tu vrednost za odgovarajući ID. ID-ovi ostalih pojava iste vrednosti KOLONA1 se ignorišu. Kada poteraš sortiranje u opadajućem redosledu ID-a dobijaš rezultat po ID-ovima prvih pojava vrednosti KOLONA1.
Code:
SELECT KOLONA1, MAX(ID) AS MAXID
FROM TABELA1
GROUP BY KOLONA1
ORDER BY MAXID DESC

Ovo bi trebalo da radi.
[ byTer @ 26.02.2004. 15:44 ] @
Probaj samo da ukljucis i tu kolonu u select.


Znaci select kolona1, id from tabela1 order by id desc.
[ noviKorisnik @ 27.02.2004. 08:23 ] @
byTer: select kolona1, id from tabela1 order by id desc
- ako 2 zapisa u tabeli imaju istu vrednost za polje kolona1, na ovaj način će ta vrednost biti izlistana 2 puta, što se kosi s traženom pretpostavkom o jedinstvenom listingu (DISTINCT) vrednosti ove kolone.
[ tweeester @ 27.02.2004. 09:53 ] @
Veoma interesantan problem, ali resenje je naravno trivijalno stvar je u tome da doticni upit:

Citat:
tizza:
"SELECT DISTINCT KOLONA1 FROM TABELA1 ORDER BY ID DESC"


ustvari nije validan (semanticki) pa ce svaka baza odbiti da ga izvrsi. Pokusaj nesto slicno da poteras na MSSQL-u ili Oracle serveru i videce. Stvar je MySQL-a sto dozvoljava ovako nesto ... ali onda bi oni morali da objasne koja se logika primenjuje prilikom izvrsenja ovakvog upita.

Pozdrav
[ MilošV @ 27.02.2004. 13:19 ] @
@NoviKorisnik: Ovaj skript koji si mi dao radi upravo ono sto sam htjeo :) Hvala! Hvala i na objasnjenju :)

@byTer
'select kolona1, id from tabela1 order by id desc'
dace isto sto i
'select kolona1, id from tabela where 1 order by id desc'
ili
' select distinct kolona1, id from tabela where 1 order by id desc'
zato sto je kolona ID po defaultu :) drugacija u svakom redu. Kontas? :)

@tweeester: Mozes li to malo da "potkrijepis argumentima" :) Nemam ni MSSQL ni Oracle ovdje ali zato imam InterBase (Firebird, tacnije) koji ne samo da ne prepoznaje gresku u upitu vec i radi upravo ono sto sam zelio... Da li mi to IB cita misli ili je to takodje "njihova stvar"? :)

Pozdrav
Tica
[ tweeester @ 27.02.2004. 14:43 ] @
Pazi sad, nemoj da se uvredis .... ako razmilis strukturalno kako ce baza podataka da uradi zahtevani upit doci ces do zakljucka da to nije moguce uraditi jer sta je vrednost kolone ID kada se uradi distinct po KOLONA1 ??
A evo i dokaza (Oracle):
Code:

desc mbr_prty_ent;

 Name                          Type

 MBR_NUM                                                NOT NULL VARCHAR2(15)
...<nebitno>...
 LANG_CD                                                CHAR(2)
...<nebitno>...

select distinct mbr_num from mbr_prty_ent order by lang_cd
                                                    *
ERROR at line 1:
ORA-01791: not a SELECTed expression


[ byTer @ 27.02.2004. 15:43 ] @
Citat:
tizza:
'select kolona1, id from tabela1 order by id desc'
dace isto sto i
'select kolona1, id from tabela where 1 order by id desc'
ili
' select distinct kolona1, id from tabela where 1 order by id desc'
zato sto je kolona ID po defaultu :) drugacija u svakom redu. Kontas? :)
Tica



E ovo mi bas i nije jasno. Mislim kakve veze ima prvi sa drugim querijem?
Cini mi se da sam izostavio Distinct inace sve ostalo je dobro.
[ MilošV @ 28.02.2004. 10:12 ] @
Cao :)
Mislim da shvatam sto hoces da kazes :) ...eto napretka :)
BTW da sam se uvrijedio, ne bih stavljao ovoliko smajlija u poruke. Evo ga jos jedan :)
Citat:
sta je vrednost kolone ID kada se uradi distinct po KOLONA1

Mozes onda i pitati sto je vrijednost ID u upitu:
Code:
SELECT KOLONA1 FROM TABELA1 WHERE [USLOV] ORDER BY ID DESC

Vidis, stvar sam (mozda i pogresno) kontao ovako: pomenuti upit "SELECT KOLONA1 FROM TABELA1 WHERE [USLOV] ORDER BY ID DESC" bi (in my book) trebao da pronadje odogovarajuce vrste (tj. njihove ...kako da kazem... polozaje) u tabeli i zatim ih poslozi tj. prikaze poslozene po odgovarajucim vrijednostima ID u svakoj od njih (izgleda da InterBase radi upravo tako).
Stoga sam i pomislio da ce SELECT DISTINCT... bla, bla, bla...
1) napraviti "listu" vrsta sa razlicitim vrijednostima u koloni KOLONA1
2) posloziti ih po odgovarajucim vrijednostima ID
3) Prikazati srecnom korisniku=meni

Kad ga ovako slozim ne zvuci toliko nelogicno, jelda?
Evo jos par smajlija :) :)

@byTer
Vidi ovako: ne postoje dva ista ID-ja u cijeloj tabeli. Upit "SELECT DISTINCT ID, KOLONA1... " ce traziti vrste u kojima su isti i ID i KOLONA1, a takvih nema jer je ID uvjek razlicit=> prikazace sve ID, KOLONA1 u tabeli. Zato je "SELECT DISTINCT ID..." <=> "SELECT ID ... WHERE 1"
[ byTer @ 28.02.2004. 16:51 ] @
Aaaa, kontam. A radi li SELECT (DISTINCT kolona1), ID ....?

Later that day...

Probao sam u SQL Serveru ne radi..