SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
10. 12. 2011. | #1 |
profesionalac
Qualified
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
|
Mysql - redni broj sloga
Da li ima neki nacin da mi mysql vrati na kom mestu je ili koji je redni broj sloga neki podatak u trenutnom result setu.
Evo i primera. Podatak ima pk=24. Imam upit: Kôd:
select * from table where foo=bar order by criteria1, criteria2 Ako izmenim upit: Kôd:
select * from table where foo=baz order by criteria1 Meni generalno ne treba "select *" vec samo redni broj za taj kriterijum. Nesto kao: Kôd:
select "rownum for table.pk=24" from table where foo=baz order by criteria1 Kopam po manualu, al ne nalazim neku takvu magicnu f-ju. Koliko sam procitao od jutros (nemojte da me drzite za rec, posto sam samo letimicno presao kada sam video da je Oracle), Oracle ima neku rownum rezervisanu promenjivu ili sta vec, gde prakticno u svakom selectu mozete da je navedete kao i polja i vraca vam sa tim slogom i njegov redni broj. Ako sam to dobro shvatio za Oracle (mozda i nisam) tako nesto slicno trazim i za Mysql.
__________________
|
10. 12. 2011. | #2 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Jesi li mislio na ovo? Ali ovako nešto bi radilo samo u slučaju da je ORDER BY isti.
PHP kôd:
|
10. 12. 2011. | #3 |
profesionalac
Qualified
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
|
Nije to. Ja sam ovo tvoje napisao ovako.
Kôd:
SELECT @rownum:=@rownum+1 rownum, table.* FROM (SELECT @rownum:=0) rownum, table; Kôd:
rownum pk field 1 28 foo 2 12 bar 3 24 baz ...
__________________
|
10. 12. 2011. | #4 |
profesionalac
Qualified
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
|
Cak pitanje je kako bi ovo i da li moze uopste u jednom upitu.
Ako imam upit: Kôd:
select "rownum for table.pk=24" from table where foo=baz order by criteria1
__________________
|
10. 12. 2011. | #5 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Tako nešto, beats me
PHP kôd:
Ovo ga opet spljošti, u slučaju da ti treba pk za rownum, onda radi bez problema. Poslednja izmena od webarto : 10. 12. 2011. u 13:45. |
10. 12. 2011. | #6 | |
profesionalac
Qualified
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
|
Citat:
Sustina je da ovaj upit, a i sve varijacije na temu koje sam probao, uvek vracaju jedan slog, samim tim rownum je uvek 1. Npr. za odredjeni kriterijum results set ima 120 slogova. U toj gomili je jedan slog sa famoznim pk=24. Meni treba rownum iliti pozicija sloga koji ima pk=24.
__________________
|
|
10. 12. 2011. | #7 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Probaj neku varijaciju na:
Kôd:
SELECT COUNT(*) FROM tabela t1 INNER JOIN tabela t2 ON t2.criteria1 < t1.criteria1 WHERE t1.pk=24
__________________
blog |
10. 12. 2011. | #9 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Ne kontam ovo za jednu tabelu (a ni za where koji se menja)? Gornji upit je nad samo jednom tabelom.
BTW, varijanta sa ovim vašim bi bila: Kôd:
select rownum from ( SELECT @rownum:=@rownum+1 rownum, tabela.* FROM (SELECT @rownum:=0) rownum, tabela order by foo desc, bar) x where x.id = 5
__________________
blog Poslednja izmena od jablan : 10. 12. 2011. u 15:17. |
"Hvala" jablan za poruku: |
10. 12. 2011. | #10 |
profesionalac
Qualified
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
|
Gornji (prvi) upit ima "join t2, t1" - odatle konstatacija da imam samo jednu tabelu. Ali posle sam tek i ja ukapirao sta si zeleo da kazes.
U svakom slucaju na osnovu tvoje sugestije sam dosao upravo do upita koji su po drugi put napisao, a ja kasno video. Mada nikada na odmet gimnastike za mozak. Kôd:
SELECT rownum FROM (SELECT @rownum:=@rownum+1 as rownum, pk FROM table, (SELECT @rownum:=0) as rownum ORDER BY foo DESC) as results WHERE results.pk=24;
__________________
Poslednja izmena od _korso_ : 10. 12. 2011. u 15:34. |
|
|