[ nnn @ 18.05.2009. 00:59 ] @
Pozdrav,

Ovako imam jednu tabelu koja ima koloku id, koja je auto increment, primarni kljuc, i jos par kolona. Taj primarni kljuc se ne koristi nigde u bazi, ali ja ga koristim u programu za neke petlje i neke stvarcice. sad posle nekog vremena postala je tabela puna rupa mislim na to da id vise ne ide jedan po jedan. npr:

id name
1 marko
2 zika
5 pera
8 blabla

a meni treba upit ili serija upita koja ce napraviti ovo:

id name
1 marko
2 zika
3 pera
4 blabla

Ja sam nesto pokusavao da pravim novu tabelu ali nisam uspeo.

Hvala na pomoci
[ Mister_rap @ 18.05.2009. 01:11 ] @
Oh boze..
Pa kako u upitu da dobijes nesto sto nije moguce!? Ako kazes da ti je vrednost id 5 ta vrednost nikako upitom nece postati 17 recimo.

Za to sto mislim da zelis mozes da iskoristis najobicniju for petelju sa brojacem (u tvojoj aplikaciji) i umesto id-a stampaj vrednost brojaca...
[ nnn @ 18.05.2009. 01:15 ] @
Pa ocu da sredim tabelu, znaci da od ove napravim novu koja ce imati poredjane kljuceve.
[ Mister_rap @ 18.05.2009. 01:30 ] @
U tom slucaju ovako nekako...

Kreiras novu tabelu:

Code:

CREATE TABLE my_new_table (
'id' INT NOT NULL AUTO_INCREMENT ,
'name' VARCHAR(20) NOT NULL ,
PRIMARY KEY ('id')
);


I upit formulises ovako:

Code:

INSERT INTO my_new_table (name) 
SELECT name FROM my_old_table Order by some_field_asc_or_desc_or_something_else

[ 357_97 @ 18.05.2009. 01:32 ] @
Mislim da ce ovo pomoci
Code:
SET @var_name = 0;
UPDATE table_name SET ID = (@var_name := @var_name +1);
ALTER TABLE table_name AUTO_INCREMENT = 5;
[ bogdan.kecman @ 18.05.2009. 03:25 ] @
nnn dobio si nekoliko resenja (i sva ce da sljakaju) ... u mistorovom mozes slobodno da sortiras po starom id-u ili po cemu vec oces, 357 resenje ce da ti renumerise postojecu tabelu (ne bih savetovao ako nije neophodno)... no .. i dalje ostaje pitanje ZASTO ... ako se taj index koristi bilo gde osim u toj tabeli, integritet podataka ode u smece ... ako se ne koristi, sta te briga da li idu po redu ili ne? to sto imas rupe u id-u ne usporava rad ni na koji nacin niti te na bilo koji nacin za bilo sta sputava. mozda si pomesao to sa fragmentacijom tabele / indexa kod myisam i innodb engine-a ali to neces resiti tako sto ces izmenjati id indexa da izbegnes rupe, jedan obican optimize table ce ti rekreirati tabele i samim tim defragmentirati ih. Index ce ostati "saren", ali podaci nece biti fragmentirani, tako da - ako je to bio cilj, zaboravi renumeraciju i samo optimizuj tabelu ...
[ nnn @ 18.05.2009. 09:52 ] @
Taj id se ne koristi nigde osim u jednoj funkciji u progamu, sad pitanje zasto, radi optimizacije programa da ima sto manje upita. Sad sta je u pitanju, u pitanju je bot za hostovanje igara, koji je veoma osetljiv na sql, u smislu oce da zalaguje igre kada se vrse upiti. Sad ja pravim komandu koja ce da posalje privatnu chat poruku svim igracima u bazi kada se igra hostuje, ili kada admin hoce nesto da objavi. Ako bi slozio indexe sada trenutno bi smanjio broj upita za polovinu.
Hvala u svakom slucaju veceras cu se igrati sa ovim.
[ bogdan.kecman @ 18.05.2009. 10:10 ] @
cek, jel ono bese ... OSTAV .. jel tako ?

sta bre duplo manje / vise upita .. o cemu pricas ... ?!?!?

ti valjda radis upit po postojecim slogovima tabele .. ne radis valjda ti u svojoj funkciji na klijentu ... "for i=0;i<10000;i++" pa za svaki radis upit ?!?!?! pa ako ga ima u tabeli super, ako ga nema to je baceno vreme!?!?! ako to radis, presaberi se, pomnozi se pa ispocetka ... a to je jedini nacin da ja vidim da ti renumeracija moze nesto pomoci...

kakva god da ti je veza izmedju te tabele i ostatka baze, izmedju aplikacije i baze ... ne postoji realan razlog da ti bilo sta radi brze ako prenumerises taj index!!! dakle jedino objasnjenje je "jako los dizajn" ... e sad, ja jesam imao nesrecu da vidim stvarno svasta tako da je moguce da sam malo preterao, ali, realno, to moze da se resi mnooooooogo bolje, bez renumeracije!
[ nnn @ 18.05.2009. 11:55 ] @
bas tako izgleda funkcija. jbg nisam ja pisao, znaci prvi nadje max id, pa onda u for petlji vraca name za svaki id od 1 do maxid. sad imam 2 opcije da menjam funkciju, ili da sredim bazu.
[ Mister_rap @ 18.05.2009. 12:09 ] @
Menjaj taj kod pod hitno jer ti je isti ubica...
[ bogdan.kecman @ 18.05.2009. 12:37 ] @
Citat:
nnn: bas tako izgleda funkcija. jbg nisam ja pisao, znaci prvi nadje max id, pa onda u for petlji vraca name za svaki id od 1 do maxid. sad imam 2 opcije da menjam funkciju, ili da sredim bazu.


vidi ... neko ti je gurno trn u oko, dal ces da popijes brufen ili da izvadis trn?

dakle u najbolju ruku zameni taj for sa upitom + while petljom ... i, nemoj da se cudis, mnoooooogo gore sam ja video (od ljudi koji primaju po 20K$ mesecno)
[ loonies @ 18.05.2009. 22:00 ] @
Citat:
bogdan.kecman: ...mnoooooogo gore sam ja video (od ljudi koji primaju po 20K$ mesecno)


Ljudi primaju 20K$ mesecno za nesto jos gore od ovoga !??
[ bogdan.kecman @ 18.05.2009. 23:17 ] @
Citat:
mnoooooogo gore


:(
[ Shinhan @ 19.05.2009. 07:40 ] @
Citat:
loonies: Ljudi primaju 20K$ mesecno za nesto jos gore od ovoga !??


Oćeš primere? http://thedailywtf.com/