[ 1boki1 @ 08.11.2016. 17:05 ] @
Prvo moram naglasiti da sam apsolutni pocetnik kada je u pitanju msql.
Napravio sam jednostavan cms. Kada u cms-u npr. izbrisem 16 red iz tabele u kojoj mi je id primarni kljuc sa AUTO_INCREMENT kako da mi se automatski promene vrednosti id-a tako da u tabeli ne bude nepravilnosti u redosledu id-a. U konkretnom primeru ako izbrisem id 16 u tabeli ce mi redosled biti bez id-a 16 (...12,13,14,15,17,18.......). Ja hocu da mi id 17 uzme vrednos 16,a id 18 vrednost 17 tako da bude pravilan redosled bez "rupe".
Da li npr. u phpmyadminu moze da se podesi da se upodobljavanje vrsi automatski. Ako ne moze onda vas molim za link ka nekom tutorijalu koji bi mi pomogao da resim problem.
Hvala unappred.
Pozzz
[ Predrag Supurovic @ 08.11.2016. 17:34 ] @
Nikako. Ako je autoincrement onda ne pipaš nista.

Ne opterćuj se sa ID i redosledom. sVe dok je ID jednistven toej dobro. a da li ima "rupa" ili ne, nebitno je.

Ako ti je bitno onda dodaj posebno polje koje će ti služiti za redne brojeve a koje neće biti PK.



[ bogdan.kecman @ 08.11.2016. 17:54 ] @
> promene vrednosti id-a

lako ali to ni slucajno ne smes da radis
[ 1boki1 @ 08.11.2016. 18:04 ] @
Hvala na odgovorima.

Code:


    $index = $_GET['index'];
    $table = $_GET['table'];

    include 'dbconfig.php' ;
    
    $sql = "DELETE FROM $table WHERE id = '".$index."'" ; 

    $count = mysqli_query($conn,"SELECT * FROM $table");
    $sum = mysqli_num_rows($count);
    for($i=$index;$i<=$sum;$i++) {
        $newId = $i - 1;
        $fin = mysqli_query($conn,"UPDATE $table SET id='$newId' WHERE id > '$index'");
    }


Ja sam probao ovako u PHP-u ali nesto ne funkcionise.Sigurno ima greska.
[ bogdan.kecman @ 08.11.2016. 18:34 ] @
nemoj to da radis, ako ti nije jasno zasto razmisli i ako posle 2 dana
ozbiljnog razmisljanja o tome zasto to ne treba da radis i dalje ne
razumes zasto, vrati se osnovama i kreni da ucis oko baza podataka od
pocetka
[ jablan @ 08.11.2016. 20:53 ] @
Čemu ti služi taj ID i zašto je bitno da ne budu rupe?
[ nkrgovic @ 09.11.2016. 09:57 ] @
Postoje JAKO dobri razlozi zasto BAS TREBA da predvidis da ce mozda da budu rupe. Autoincrement treba da se inkrementira i da ti garantuje da ce da raste, to za koliko ce da raste (auto_increment_offset i auto_increment_increment) mogu da se postave na vrednosti vece od 1 da bi garantovale integritet podataka npr. u slozenim replikacionim semama, i ni ukom slucaju ne mozes (i ne smes) da pretpostavis da ce biti tacno 1. Ti MOZES da upucas rucno sta god zelis u to polje, ali onda mozes da razvalis sve i svasta. Koristi automatiku i pusti je da radi svoj posao. :)
[ 1boki1 @ 09.11.2016. 12:44 ] @
Hvala svima.

Smetaju mi rupe jer imam ispis iz baze u php-u baziran na BETWEEN npr(SELECT * FROM Products
WHERE id BETWEEN 10 AND 20) . ako se stavka obrise onda imam rupu u ispisu.Znam da sam trebao da idem sa Limit umesto between ali sada ne mogu da menjam.
Siguran sam da nista necu upropastiti ako "naslino" upotobljama indexe. Ovo mi treba za fax,nije nista ozbiljno.
Snacicu se nekako da ovo zavrsim....
[ bogdan.kecman @ 09.11.2016. 12:50 ] @
los ti je taj uslov
[ 1boki1 @ 09.11.2016. 13:30 ] @
Resio sam problem samostalno. Logika i koncept nije dobar,ali funkcionise.
Hvala na savetima.
pozzzzzzzz

[Ovu poruku je menjao 1boki1 dana 09.11.2016. u 14:42 GMT+1]
[ bogdan.kecman @ 09.11.2016. 14:03 ] @
pa upucavas sebe u nogu i trazis pomoc, osim toga da ne treba da pucas
sebi u nogu tesko ces da dobijes bolji odgovor ... pucaj izmedju
kostiju, u meko tkivo, zaobidji tetive ... to su sve glupavi odgovori,
jedini pravi odgovor ti je nemoj to da radis .. a sad ako bas oces da se
upucas u nogu, slobodno al tesko da ce ti neko ovde pomoci ..


da ponovim jos jednom - NEMOJ DA MENJAS VREDNOST ZA ID, PK je stvar koja
NE TREBA NIKAD DA SE MENJA osim u izrazito retkim izuzetcima ... kada
umes da razlucis da li je nesto taj izuzetak neces postavljati pitanje
kako to da izvedes, imaces debelo visegodisnje iskustvo iza sebe. Dokle
god imas potrebu da pitas kako - NE TREBA TO DA RADIS!

mozes da postavis pitanje - kako da resim problem, navedes koji ti je
problem, i ljudi ce ti savetovati kako taj problem da resis (bez da
menjas vrednost PK polja) ...

ako nisi u stanju da prihvatis jedan tako jednostavan savet, veruj mi,
nije IT oblast u kojoj zelis da budes
[ plague @ 09.11.2016. 21:35 ] @
@1boki1 Bogdan ti je dao dobar savet.
U realnim sistemima se najcesce neka druga tabela oslanja na taj PK kroz FK. Tada neces moci da promenis vrednost PKa.

Ako radis to za fax i ne zelis da promenis, neces se dobro provesti na poslu kada ti to postane profesija.

Verujem da ce svako ovde da ti kaze da je u realnosti neverovatno veci pritisak da se stvari odrade sto brze i velike greske skupo kostaju.
Ovo ti je idealna prilika da vidis kako pravi razvoj ide kada usled neke bilo greske ili odluke deo sistema mora da se refaktorise.
[ bogdan.kecman @ 09.11.2016. 21:43 ] @
ako to radi za fax i profanu pokaze app koji updateuje pk vrednosti na
delete rekorda i profa ga ne istera sa polaganja ispita i taj profa
treba da preispita svoju poziciju
[ bloker @ 11.11.2016. 12:18 ] @
Zašto ne dodaš u tabelu polje "Sifra", a ID ostaviš kakav jeste i koristiš ga za povezivanje sa drugim tabelama, a kada obrišeš neki slog u bazi i hoćeš baš da ti sve ide redosledom napravi logiku koja će da pretaba polje "Sifra" po toj tvojoj logici..
A takođe možeš da napraviš logiku koja će da ti izbacuje prvu slobodnu rupu u Siframa i da nju koristi..