[ twix @ 13.02.2005. 02:24 ] @
Ne znam ni sam kako da postavim pitanje, posto prvi put radim sa mysql bazom, procitao sam par tutoriala i vec sam naisao na problem.

mysql> select * from user;
+----+-----------+-----------------+----------+--------------+
| id | username | email | password | website |
+----+-----------+-----------------+----------+--------------+
| 10 | | | | |
| 9 | korisnik1 | [email protected] | pass1 | www.test.com |
+----+-----------+-----------------+----------+--------------+
2 rows in set (0.04 sec)

Znaci dodao sam kao neke korisnike, i pobrisao ih,.. svaki sledeci koji se reguje dobije sledeci id iako su prethodni obrisani,.. a tabelu sam kreirao na sledeci nacin:

CREATE TABLE user (
id int(10) NOT NULL auto_increment,
username varchar(25) NOT NULL default '',
email varchar(250) NOT NULL default '',
password varchar(25) NOT NULL default '',
website varchar(250) NOT NULL default '',
PRIMARY KEY (id),
);

Kao sto sam rekao, pocetnik sam, pa me zanima kako mogu da resim ovaj problem, znaci kad se reguje user da dobije sledeci po redu ID,.. i recimo ako obrisem 5 usera (od 5) da sledeci koji se reguje bude broj 1 a ne 6.

I jos nesto,.. kako jos da uradim da kada se neko registruje, ne moze da ostavi neko polje prazno:

if ( $username == "" and $password == "" and $email == "" and $website == "" )
{ echo 'Polja ne mogu da budu prazna!'; }

?
[ _owl_ @ 13.02.2005. 14:16 ] @
Zasto je bitno da ID-evi idu jedan za drugim(i da ne bude rupa)??
[ twix @ 14.02.2005. 02:04 ] @
Pa sad ;) treba mi zbog neke liste, mada verovatno to moze da se resi na neki drugi nacin...
[ jablan @ 14.02.2005. 07:52 ] @
Za ovo pitanje treba napraviti top temu, svako malo pa se nađe neko ko pita kako da mu ključevi budu uzastopni...
[ _owl_ @ 14.02.2005. 14:14 ] @
Pa ako je zbog liste (ustvari tebi treba samo redni broj ispred svakog reda), onda ti ne preostaje nista drugo nego da sednes i zasuces rukave. Moguce je ostvariti da imas uzastopne brojeve bez rupa samo sto ces da se iscimas dok to napravis. Posle ces se nadati da baza ne bude opterecena sa mnogo izmena (brisanje pa dodavanje) posto se moze desiti da dodje do znatnog usporenja - ali ipak sve to je vredno krajnjeg cilja zar ne?
[ twix @ 14.02.2005. 20:16 ] @

Znas kako, dok ne smislim pravo resenje za to, necu ni stavljati ID,.. jer problem se javlja posle kad imas recimo 100 korisnika i obrises 41 i 72, treba svima da se pomeri ID, a to vec jeste problem, a posto sam ja pocetnik uopste nemam predstavu kako da krenem, mislim imam nekih ideja (sa max brojevima) ali za sada necu oko toga da se cimam, ako neko bude imao ideju ili resenje super, ako ne,.. ostace ce za sada bez ID-a.
[ caiser @ 14.02.2005. 20:27 ] @
Ako moze da bude bez ID-a zasto ne moze da bude sa ID-evima koji nisu po redu? Ne kontam.
[ twix @ 15.02.2005. 01:37 ] @
Citat:
caiser: Ako moze da bude bez ID-a zasto ne moze da bude sa ID-evima koji nisu po redu? Ne kontam.


Pa sad, ako krenem tako, onda mi ni treba ni lista, ni sajt ;) u svakom slucaju, tu kolonu za sada necu da prikazujem, dok ne saznam id shemu...
[ stsung @ 15.02.2005. 10:44 ] @
Pozd.
Ovaj ti komentar ne stoji. Ako neshto jednostavno ne treba raditi (a ne treba jer se kosi sa principima baza podataka), to ne znachi da ne treba raditi ni ostalo.

Pomenucu samo neke od problema chachkanja kljucheva kako ne treba:
- Aplikacija obrishe neku relaciju, i kulturno krene da menja kljucheve kako jelda ne bi bilo rupa. U tom trenutku drugi korisnik se nakachi i takodje obrishe nekog korisnika i krene da menja kljucheve. Problem je ochigledan - postoji verovatnoca da ce da se simultanim menjanjem kljuchevi totalno pobrkaju. (Molim samo bez komentara kako nikad nece biti drugog korisnika)
- Ako, dace codd, uznapredujesh sa radom sa bazama podataka, i pozhelish da ubacish josh koju tabelu koja ce biti vezana sa ovom i imati josh kojekakve podatke, treba da znash da je taj kljuch veza izmedju te dve (ili n) tabele/tabela. To znachi da bi chachkanje po kljuchevima iz prve tabele povlachilo da ce veze pobrkati, shto opet znachi da se moraju menjati i podaci u drugoj ili drugim tabelama. A sve to je totalna glupost i nevidjeno gubljenje vremena ... bolje da se skoncentrishesh na neke druge stvari, kao shto je ne korishcenje kljucheva u druge svrhe osim za ono za shta su namenjeni.

Za kraj, preporuchujem ti da malo prochitash o relacionim bazama podataka (google?) pre nego shto nastavish da ih koristish.

No, ako si bash zapeo da ti idu po redu, dajem ti reshenje bazirano na tvojoj strukturi tabele, i predlazhem da se bavish nechim drugim ako ga budesh primenio.
Code:

DELETE from user WHERE id=[ID];
UPDATE user SET id=id-1 WHERE id>[ID];
ALTER TABLE user auto_increment=[MAX(id)+1]

Ovo naravno podrazumeva da je tabela vec uredjena. [ID] i [MAX(id)+1] su konstantne vrednosti.
Sada idem da se ubijem, jerbo vece djubre od koda u zhivotu nisam napisao

Svako dobro.