[ goran33 @ 30.10.2002. 20:44 ] @
Koji je najlakši način da iz tabele slike "izvadim" poslednji upisani id, koji je primarni ključ, a njegova vrednost je jednaka poslednjem upisanom polju id iz neke druge tabele (npr. osoba)...

Kod za automatski unos id u tabelu slike je sledeći:

mysql_query ("INSERT INTO slike
(id, src, filename, filesize, filetype)
VALUES
(LAST_INSERT_ID(),'$data', '$src_name', '$src_size', '$src_type')
");

Znači id osoba i id slike su identični...
[ degojs @ 30.10.2002. 23:02 ] @
Ne znam bas za mySQL ali u SQL Serveru i Oracle moze da se pozove funkcija MAX(polje) da bi dobio poslednju vrednost pod uslovom da je polje identity (= auto increment, = auto number) ili da vrednosti u polju idu 'rastuci' redom (ili 'opadajuci' u kom slucaju koristis MIN(polje) ).

Nesto poput:
SELECT MAX(polje) FROM tabela ...itd.

Meni se cini da je, upravo zbog ovakvih stvari, uvek dobro imati polje koje je auto-increment da bude primary key u tabeli.


HTH
[ Dejan Topalovic @ 01.11.2002. 04:33 ] @
Citat:
goran33:
Koji je najlakši način da iz tabele slike "izvadim" poslednji upisani id, koji je primarni ključ, a njegova vrednost je jednaka poslednjem upisanom polju id iz neke druge tabele (npr. osoba)...

Kod za automatski unos id u tabelu slike je sledeći:

mysql_query ("INSERT INTO slike
(id, src, filename, filesize, filetype)
VALUES
(LAST_INSERT_ID(),'$data', '$src_name', '$src_size', '$src_type')
");

Znači id osoba i id slike su identični...


Zadnji uneseni id iz neke druge tabele mozes saznati zavisno o potrebi i nacinu na koji radis skriptu.
1. ako u istoj skripti vrsis unos i u tabelu osobe i u tabelu slike, onda zadnji uneseni id u tabeli osobe saznajes funkcijom mysql_insert_id()
2. - vjerovatno je pod jedan ono sta ti treba, ali ako nije, onda reci kako vrsis unos podataka, pa cu ti reci i drugi nacin -

Npr. za prvi nacin:
Preporucio bih ti da stavis auto_increment polje i stavis ga da bude primary.
Ako imas osim tog polja jos neka druga polja, npr.:
id, ime, godine
onda ovako unosis podatke:

$linkhandler = mysql_connect("localhost","user","pass") or die(mysql_error());
mysql_query("INSERT INTO osobe(ime,godine) VALUES('$ime','$godine')",$linkhandler);

Vrijednost za id ne moras navoditi, jer se automatski upisuje vrijednost zadnjeg unos povecan za 1.
Vrijednost ovog zadnjeg unosa saznajes funkcijom mysql_insert_id():

$zadnji_unos = mysql_insert_id($linkhandler);

i onda imas:
mysql_query("INSERT INTO slike(id, src, filename, filesize, filetype)
VALUES ('$zadnji_unos','$data', '$src_name', '$src_size', '$src_type')
",$linkhandler);

Valjda je to ono sta si trazio.
[ Mihailo @ 01.11.2002. 11:38 ] @
Čemu tolika filozofija, postoji većina agregatnih funkcija (MIN, MAX, AVG, COUNT...) i kod MySQL-a.
[ goran33 @ 01.11.2002. 16:20 ] @
Jeste... Prvi odgovor je sasvim dovoljan... select max(id), radi ok...
[ Riste Pejov @ 05.11.2002. 18:18 ] @
Da se koristi max(id) umesto LAST_INSERT_ID() ?!?!?!?!?!??!?!

Ovakvu ideju mozes dobiti samo od nekoga ko nema pojma o baze podataka.

Mislim da valjda neko ko je diskutirao ovo zna kako radi max(id),

razlika je sledeca:

kad koristis LAST_INSERT_ID() onda samo iz RAM memorije mysqld izbaci zadnji ID koji je generisao. Sto je najbolje resenje koje mozes pozeleti.

Ukoliko se odlucis za max() onda za istoj tabeli se pretrazuje binarno drvo indexa, sve dok se ne nadje najveci ID. Ukoliko je kolona ne-ndexirana, onda DB engine radi full scan.

Ukoliko ti explicitno ne treba najveca vrednost u koloni, onda izbegavaj max(), posebno kad je u pitanju UID kolona. Zamisli sta bi se desilo kad bi ta tabela stigla do 100K+ recorda.

Pozdrav, i bez uvreda za korisnika max()

[ Mihailo @ 05.11.2002. 18:43 ] @
Moja je greška što temu nisam pročitao detaljno, pa sam samo napomenuo da i kod MySQL-a postoji MAX(). Naravno, LAST_INSERT_ID pod uslovom da je auto_increment, i to je najbolje rešenje. S druge strane, logično je index bude na toj koloni, i u tom slučaj MAX() radi posao dobro.
[ degojs @ 06.11.2002. 02:32 ] @
Riste, ja sam napomenuo da ne radim sa mySQL-om tako da mu specificno resenje koje se koristi na SQL Serveru nisam ni predocavao. Nisam ni krio da nista ne znam o MySQL cak sam to i istakao. Jednostavno, dao sam nesto sto bi moglo da radi na sve tri baze -- bez ikakve iluzije da je to najbolje resenje i da neko nece predociti nesto sto je mnogo bolje.
Ne vidim razlog da se uzbudjujes :-) Svakako, tvoj odgovor je i za mene prilika da naucim nesto o toj bazi.

Pozdrav