[ PHPovac @ 18.04.2012. 22:58 ] @
Ćao svima. Pravim jedan sajt i treba da ima multiple upload. To sam rešio, ali nisam siguran kako da čuvam podatke o slikama u bazi.

Razmišljao sam da napravim polje attachedPhotos u tabeli i da u njega upisujem uploads/imeslika.jpg|||uploads/imeslike2.jpg pa da posle vršim explode ili kako..?


Sada sam se setio još nečega. Da napravim tabelu attachedPhotos, i tabelu photosRelations.
I onda u attachedPhotos ubacujem id, lokaciju, datum i title, a u photosRelations ubacujem
id, postID, photoID
Ja mislim da je ovo drugo bolje, a vi?

[Ovu poruku je menjao PHPovac dana 19.04.2012. u 00:09 GMT+1]
[ dakipro @ 19.04.2012. 07:51 ] @
Ovo drugo je bolje, ustvari ovo drugo je skoro pa jedino dobro za slucaj koji ti imas. Ako ti treba vise istih fotografija na nekoliko razlicitih postova, onda moras tako sa N-N relacijom (ili kako se vec to tehnicki zove)
[ Milos911 @ 19.04.2012. 15:07 ] @
Citat:
Sada sam se setio još nečega. Da napravim tabelu attachedPhotos, i tabelu photosRelations.
I onda u attachedPhotos ubacujem id, lokaciju, datum i title, a u photosRelations ubacujem
id, postID, photoID

Mislim da nema potrebe da dodajes drugu tabelu, kad vec imas postID. Dodaj jos jednu kolonu u prvu tabelu, pa hvataj slike na osnovu nje... A posto se slike nece cesto brisati, izbacio bih id kolonu iz prve tabele, i samo ostavio postID. Posle brises na osnovu postID i lokacije...
[ maddog_srb @ 19.04.2012. 17:47 ] @
A sta ako zeli da ima dve iste slike u istom postu? Npr:

Ja bih ipak isao sa predlozenom opcijom br. 2
[ Milos911 @ 19.04.2012. 19:04 ] @
INSERT INTO attachedPhotos (postID, lokacija, datum, title) VALUES ('1','ime_prve_slike.jpg','datum','title')
INSERT INTO attachedPhotos (postID, lokacija, datum, title) VALUES ('1','ime_druge_slike.jpg','datum','title')
SELECT * FROM attachedPhotos WHERE postID='1'
DELETE FROM attachedPhotos WHERE postID = '1' AND lokacija="ime_prve_slike.jpg"

Umesto:
INSERT INTO attachedPhotos (id, lokacija, datum, title) VALUES ('1','ime_prve_slike.jpg','datum','title')
//get last insert id
INSERT INTO photosRelations (id,postID,photoID) values ('1','1','1')
INSERT INTO attachedPhotos (id, lokacija, datum, title) VALUES ('2','ime_druge_slike.jpg','datum','title')
//get last insert id
INSERT INTO photosRelations (id,postID,photoID) values ('2','1','2')
SELECT * FROM photosRelations LEFT JOIN attachedPhotos on photosRelations.photoID = attachedPhotos.id WHERE photosRelations.postID='1'
DELETE FROM photosRelations WHERE photoID='1'
DELETE FROM attachedPhotos WHERE photoID='1'

:)
U prvom lepo stavi index na attachedPhotos.postID, i uziva :) Trosice manje memorije, i radice brze. Jedno ce brisanje biti malo sporije, jer ce morti da se radi pretraga "lokacija" polja, ali realno to je zanemarljivo jer ne brise slike tako cesto......

Inace, kad se vec raspisah (ovo je cisto licno razmisljanje), nemoj da upisujes lokaciju, vec samo ime slike. Posle si slobodan da prebaci slike negde drugo ako je potrebno, a da putanju menjas u aplikaciji (umesto da menjas sve redove u bazi)... I ako bi koristio originalni drugi primer, umesto da stavis da ti se id slike zove id, bolje stavi photoID (pa posle kad radis left join, ne pises blablabla ON blablabla nego USING (photoID).
[ markoco @ 22.04.2012. 11:25 ] @
Klasicna, neko bi rekao 'pocetnicka', Parent-Childs struktura. UVEK i SAMO snimati imena falova, bez pune lokacije (osim ako slika nije sa drugog hosta :D). Moze se raditi i sa FOREIGN KEY (http://dev.mysql.com/doc/refma...b-foreign-key-constraints.html) ali ce tada brisanje samih fajlova biti malo komplikovano. U ostalom, ako je Facebook dozvolio sebi da ne brise slike (jos uvek im se moze pristupiti ako znate punu lokaciju (URL) cak i ako su izbrisane sa profila) ne vidim zasto bi i ti brinuo oko toga (jedino mozda zbog MB limita) ...
[ PHPovac @ 22.04.2012. 13:37 ] @
Zaboravio sam da se javim, rešio sam putem dve tabele...
[ Milos911 @ 22.04.2012. 16:18 ] @
Date upisuj kao timestamp...
[ PHPovac @ 22.04.2012. 16:43 ] @
poslužiće i ovo.. za sada koristim strtotime funkciju