[ anthylon @ 13.03.2006. 09:47 ] @
Pozdrav!

Ma, zapeo sam na jednom upitu.

Zamislimo situaciju:
Naziv tabele: auta
Polja: id, naziv_auta, redni_broj...

Treba mi INSERT upit koji ce upisati naredni redni broj. Dakle, upit koji ce provjeriti broj auta (broj redova: COUNT(*)) i tu vrijednost (+1) upisati pri dodavanju svakog narednog. Naravno, zelio bih da to rijesim upitom a ne stored procedurom.

Mislim da nije komplikovano ali ipak... Probao sam SELECT-om ali nisam uspio!

Hvala
[ Dejan Topalovic @ 13.03.2006. 09:48 ] @
Za koju bazu ti treba?
[ anthylon @ 13.03.2006. 10:10 ] @
MySQL
[ Dejan Topalovic @ 13.03.2006. 10:19 ] @
Polje id treba da bude AUTO_INCREMENT ...
[ anthylon @ 13.03.2006. 10:36 ] @
Nisi me shvatio. ID i jeste Auto...

To nije sporno. Imam INTEGER polje redni_broj! Njeg treba da popunim. Ne mogu se povoditi ID-om jer moguca su brisanja npr. gdje je ID = 4. Onda se redni brojevi mijenjaju (taj dio odradim rucno). Ali, prilikom insertovanja zelim prebrojati redove i redni broj u polje redni_broj!!!


Dakle, INSERT INTO naziv_tabele VALUES ('Automobil x', X)

gdje je X => podupit ili funkcija (ako postoji) koja upisuje broj reda... Eh, ovdje bi trebalo koristiti nesto poput:
Code:
INSERT INTO test (naziv_auta, redni_broj) VALUES ('Automobil X',
(SELECT COUNT(test.ID) + AS br))


Samo, ovo sto sam ja napisao NE RADI!


Shvatash?
[ broker @ 13.03.2006. 10:59 ] @
Pogresno radis. To se tako jednostavno ne radi. Redni broj u relacionim bazama nema mnogo smisla (ima par specijalnih izuzetaka)

Ako objasnis za sta u stvari koristis taj redni broj, mozda ti mozemo predloziti neko alternativno resenje koje je bolje.
[ anthylon @ 13.03.2006. 11:15 ] @
Jao

Stvarno izvinjavam se ako se cak i pogresno izrazavam!!! Nastojim da...

Code:

 | id | redni_broj | polje...|


Ljudi, meni samo treba broj redova u tabeli!

Pri upisu novog sloga trebam informaciju o broju redova u toj tabeli tako da mogu uz +1 upisati broj tog reda koji upisujem. Nista vishe...

[ Dejan Topalovic @ 13.03.2006. 11:35 ] @
@anthylon: Ok, prebrzo sam dao odgovor... Sad shvatam sta ti treba. :)

Najprije da priupitam nesto - sta ako uneses redni broj prilikom unosa, pa kasnije obrises nekoliko slogova iz tabele - onda ti vrijednost u koloni redni_broj nece imati smisla, osim ako prihvatas rupe u tom redoslijedu (npr. 1, 2, 5, 7, 8, 12)?

Kako god, evo mog rjesenja:
Code:

mysql> SET @redni_broj = (SELECT COUNT(id) FROM auta);

mysql> INSERT INTO AUTA VALUES (NULL, 'KIA Sorento', (select @redni_broj:=(@redni_broj+1)));

Moze li ovako?
[ misk0 @ 13.03.2006. 12:27 ] @
Generalno gledajuci to bas i nema smisla.
Ti na taj nacin dobijes 'redni broj' medjutim situacija :
- imas 10 slogova
- dodajes sledeci, on dobija redni broj 11
- obrishes 3 sloga, i imas zadnji slog sa rednim brojem 11 a nemas 11 slogova vec 8 - prva nelogicnost
- dodajes sledeci slog i on kao novi ima redni broj 9 a prethodni slog ima veci redni broj - druga nelogicnost
- dodajes jos 2-3 sloga i jedan od njih ima redni broj 11 - imas dva sloga sa istim rednim brojem - treca nelogicnost
Na taj broj kao takav se ne mozes nikako pouzdano osloniti.

Mozda je ipak bolje da napishes sta zapravo zelis postici pa da ti neko pomogne oko toga.
[ anthylon @ 13.03.2006. 14:09 ] @
U redu, predajem se

Sredio sam misli; informisao se sta u stvari treba da pravim Necu uopce upisivati redne brojeve u tabelu!

Krivo mi sad sto nisam kvalitetno opisao situaciju ali potrajalo bi!!!!

Hvala