[ define @ 19.12.2005. 16:06 ] @
Radim neku scriptu za top listu, i sve radi, ali sada zelim nesto malo dalje da idem
Ono sto hocu je da u tabeli koju imam npr
+--------+-----------+
| sajtid | brklikova |
+--------+-----------+
| 3 | 50 |
| 4 | 49 |
| 8 | 39 |
| 15 | 33 |
| 6 | 31 |
| 7 | 9 |
| 14 | 9 |
| 16 | 9 |
| 1 | 8 |
| 9 | 8 |
| 10 | 5 |
| 11 | 4 |
| 5 | 0 |
| 12 | 0 |
| 13 | 0 |
+--------+-----------+
dodam jos jednu kolonu sa rednim brojem, koji bi bio fiksan tako da od pocetka tabele postoje indexi u toj koloni, tako da bi na trecem mestu bio sajtid 8 a na 4-tom sajtid 15. Ukoliko ovaj sa sajtid-om 15 pretekne ostale on bude u vrhu i nosi vrednost 1.
Ono sto ja hocu je da tu kolonu koja bi se zvala npr broj koristim kao uslov. Znaci kazem "select * from tabela where broj=4" i tako dobijem sajt na 4-tom mestu

Ima li sanse nesto ovakvo da se odradi?
[ Fedya @ 20.12.2005. 06:56 ] @
Ako sam dobro shvatio hoces da ti se tabela sama sortira (menja fizicki raspored polja u tabeli). To ne moze tako da se uradi, ali mozes na primer da definises pogled iz te tabele sortiran po koloni 'brlinkova'.

A sto se tice ispisa po broju prvo sto mi pada na pamet je da napises storovanu proceduru koja kao parametar prima mesto koje zelis da vidis pa preko kusora prikazes redni broj zapisa koji te zanima (FETCH ABSOLUTE @Mesto)...
[ jablan @ 20.12.2005. 08:43 ] @
Da li se pitanje zaista odnosi na MSSQL, pošto vidim da si ga postavio i u forumu za MySQL. Rešenje u ove dve baze se dosta razlikuje...

U MSSQLu, mislim da se najčešće rešava korišćenjem temp tabele sa identity (autoincrement) poljem u koju se prebacuju ključevi iz osnovne tabele po željenom redosledu (u tvom slučaju opadajuće po broju klikova).

Kad imaš tu temp tabelu, jednostavno pokupiš slog sa ključem koji ti treba.

Ako je u pitanju prvi slog, ili prvih nekoliko slogova, zaboravi sve gorenavedeno i koristi TOP.
[ branimir.ts @ 28.12.2005. 15:32 ] @

Predpostavimo da imas Tabelu koja se bas tako zove, tj Tabela, i da u njoj imas sledece kolone i podatke :

id klik
---------------
1 8
4 49
5 0
6 31
7 9
8 39
9 8
10 5
11 4
12 0
13 0
14 9
15 52
16 9
---------------

Ukoliko je relativno mala tabela ( ispod 10 000 slogova), mozes slobodno koristiti sledeci query :

Code:

SELECT id, klik,
(select count(id) + 1  from tabela tmp where  tmp.klik > t.klik ) AS rang
FROM tabela AS t
ORDER BY klik DESC;


Rezultat :

id klik rang
---------------------
15 52 1
4 49 2
8 39 3
6 31 4
16 9 5
14 9 5
7 9 5
9 8 8
1 8 8
10 5 10
11 4 11
13 0 12
12 0 12
5 0 12
------------------------

Dalje, mozes pretvoriti ceo query u jednu virtuelnu tabelu, a zatim izdvajati samo one
slogove koji su ti potrebni.

Code:

SELECT * FROM 
( SELECT id, klik,
(select count(id) + 1  from tabela tmp where  tmp.klik > t.klik ) AS rang
FROM tabela AS t
ORDER BY klik DESC ) as vt 
where  rang  <>= x


Pozdrav