[ kelja @ 08.08.2012. 12:56 ] @
Pozdrav, mnogi od vas su ovo radili, siguran sam...

Zanima me dizajn baze recepata... Pretpostavljam da dve tabele (kategorije i recepti), nisu bas najgenijalnije resenje... :D

E, sad, gledajuci neka gotova resenja, dosao samo do otprilike sledece strukture:

categorije: id | title
recepti: id | cat_id | name | description ... i sta god jos tu treba (cekam da vidim dizajn strane/sablona za recepte, pa cu znati preciznije)...

E, sad, sastojci, kamen spoticanja... Bilo bi bezveze nagurati sastojke (koji se cesto ponavljaju) u tabelu sa receptima, pa bi onda to ovako islo...

sastojci: id | name, pa onda jedna tabela za povezivanje sastojaka sa receptima:

sastojci_recepti: id | sastojak_id | recept_id

E, sad... tu su i kolicine (koje ce se sigurno relativno cesto ponavljati)... da li i sa njima da uradim isto???

Hvala!
[ pajaja @ 08.08.2012. 13:18 ] @
Ne verujem da ces da dobijes nesto ako ti kolicine stoje u posebnoj tabeli, ja bih dodao jos jednu kolonu u sastojci_recepti u kojoj ce biti upisana kolicina, i u sastojci jednu kolonu u kojoj ce biti upisana jedinica kolicine sastojka.
[ kelja @ 08.08.2012. 14:56 ] @
Citat:
pajaja:
Ne verujem da ces da dobijes nesto ako ti kolicine stoje u posebnoj tabeli, ja bih dodao jos jednu kolonu u sastojci_recepti u kojoj ce biti upisana kolicina, i u sastojci jednu kolonu u kojoj ce biti upisana jedinica kolicine sastojka.


Hvala!
Evo sad sam dobio dizajn... Na demo strani ni nema kolicina, pa se sad raspitujem da li im to treba, ili ce to sve da bude opisano u deskripciji recepta (kroz 'korake' u pripremanju)...

Pretpostavljam da je broj 'koraka' promenljiv, i trebalo bi da se koristi onaj fensi jquery slider, kao ovde: http://www.fullstopinteractive.com/#our-projects

na recept stranici...
isto sam pokusao da objasnim da ovaj fensi slajder nije dobar za setanje po kategorijama (SEO i AJAX njakanje)... ne znam da li smo se razumeli... :D
[ pajaja @ 08.08.2012. 22:02 ] @
Ovo sad nema mnogo veze sa PHP-om ali moja preporuka je da obavezno imate listu sastojaka sa kolicinom i vremenom pripreme. To je prva stvar koju ce posetilac da pogleda i trebalo bi da sadrzi dovoljno informacija da moze da odluci da li mu odgovara recept ili ne.
[ kelja @ 08.08.2012. 22:50 ] @
Da, da, to ce svakako biti (lista sastojaka i vreme pripreme)...
(mozda je trebalo maknuti temu u MySQL, ali doci ce i do php-a, kad dodjem do organizacije admin panela, na primer:D)

Pozdrav!
[ PHPovac @ 08.08.2012. 23:10 ] @
Ja pravim jedan sajt sa receptima i ja sam to rešio na mnogo "gluplji" način.
Sastojci su ul u jednoj koloni, priprema je u druogoj.
[ kelja @ 08.08.2012. 23:34 ] @
:)
Pa meni se to najvise svidja, ali kazu da nije 'profi'... kako si resio pretragu?

Da, kako biste ovo resili... svaki recept ce imati x 'koraka' koji bi tako trebalo da budu prikazani na strani... u admin panelu bih ih svakako odvojio... e sad...da zbudzim to u jednu kolonu nekako, u tabelu sa receptima, ili pak???




[ Milos911 @ 09.08.2012. 00:29 ] @
Citat:
kelja: :)
Pa meni se to najvise svidja, ali kazu da nije 'profi'... kako si resio pretragu?

Da, kako biste ovo resili... svaki recept ce imati x 'koraka' koji bi tako trebalo da budu prikazani na strani... u admin panelu bih ih svakako odvojio... e sad...da zbudzim to u jednu kolonu nekako, u tabelu sa receptima, ili pak???

Ja bih sve to stavio u jednu celiju, a upisao u fazonu:
"Ovo je recept za pitu:babina pita <|> Ovo je prvi korak <|> Ovo je drugi korak <|> ovo je treci korak"
Posle raditi explode sa "<|>" i ispisivati korake. Mnogo je lakse manipulisati podacima kad su ovako upisani. Eventualno dodati jednu kolonu u kojoj ce se cuvati broj koraka, ukoliko je potrebno za pretragu.


Citat:
sastojci: id | name, pa onda jedna tabela za povezivanje sastojaka sa receptima:
sastojci_recepti: id | sastojak_id | recept_id

Cek samo, kako mislis da trazis recepte koji imaju sastojak sa id=1 i sastojak id=2 i sastojak id=33?
[ PHPovac @ 09.08.2012. 02:00 ] @
Citat:
kelja: :)
Pa meni se to najvise svidja, ali kazu da nije 'profi'... kako si resio pretragu?

Pa pretraga je najjednostavniji match against. Tako i sastojke i pripremu i naslove sve odjednom.
[ pajaja @ 09.08.2012. 08:50 ] @
Citat:
Ja bih sve to stavio u jednu celiju, a upisao u fazonu:
"Ovo je recept za pitu:babina pita <|> Ovo je prvi korak <|> Ovo je drugi korak <|> ovo je treci korak"
Posle raditi explode sa "<|>" i ispisivati korake. Mnogo je lakse manipulisati podacima kad su ovako upisani. Eventualno dodati jednu kolonu u kojoj ce se cuvati broj koraka, ukoliko je potrebno za pretragu.

Moze da smesti korake u array i onda da ga zapise kao JSON u bazu. Ima vec funkcije za encode i decode koje ce da se pobrinu za sve i nece morati da misli o eskejpovanju delimitera unutar teksta.
[ kelja @ 09.08.2012. 12:57 ] @
Hvala, ljudi, vasi saveti su kao i uvek, pomogli!
[ Milos911 @ 09.08.2012. 14:49 ] @
Citat:
pajaja: Moze da smesti korake u array i onda da ga zapise kao JSON u bazu. Ima vec funkcije za encode i decode koje ce da se pobrinu za sve i nece morati da misli o eskejpovanju delimitera unutar teksta.

Ovo tvoje je mnogo elegantnije resenje :)

Posto je OP nasao sve sto ga je zanimalo, da i ja pitam:
Citat:
Milos911: "sastojci: id | name, pa onda jedna tabela za povezivanje sastojaka sa receptima:
sastojci_recepti: id | sastojak_id | recept_id"
Cek samo, kako mislis da trazis recepte koji imaju sastojak sa id=1 i sastojak id=2 i sastojak id=33?

Jel ima neko odgovor na ovo pitanje, nevezano za temu ali me zanima da li je moguce kako izvesti (normalno da bude jedan query, i ne previse zahtevan)?
[ pajaja @ 09.08.2012. 16:31 ] @
Ne znam koliko je ovo najbolje resenje, bolje da pitas na mysql forumu, ali prvo sto mi pada na pamet je:
Code (sql):

SELECT r.recept_id, itd...
FROM recepti r
INNER JOIN sastojci_recepti s1 ON s1.recept_id = r.recept_id AND s1.sastojak_id = 1
INNER JOIN sastojci_recepti s2 ON s2.recept_id = r.recept_id AND s2.sastojak_id = 2
INNER JOIN sastojci_recepti s3 ON s3.recept_id = r.recept_id AND s3.sastojak_id = 33
 

i ne izgleda bas skalabilno :)

[Ovu poruku je menjao pajaja dana 09.08.2012. u 17:46 GMT+1]
[ kelja @ 10.08.2012. 10:26 ] @
Hehe, OP™ ima jos nekih pitanjaca... :D

Citat:
PHPovac: Pa pretraga je najjednostavniji match against. Tako i sastojke i pripremu i naslove sve odjednom.


Znaci, koristis fulltext search. Ok, to (valjda) znaci da moram i imena kategorija i recepata i kratke opise da drzim u 'text' tipu polja?

I onda, koliko vidim, moglo bi da se svede ovo na dve tabele, ipak - recepti i kategorije, ako sam te dobro razumeo?
[ PHPovac @ 10.08.2012. 10:39 ] @
Da, osim ako nećeš više kategorija, onda trebaš tri (kategorije, veze_kat, recepti).
Inače fulltext može i na varchar, ja koristim tekst samo za opise i sadržaj.
Ako hoćeš da ti sajt bude jednostavniji, možeš i sa dve trabele, a recept da ima kolonu kategorije gde smeštaš id-ove u formatu 1,2,3,4 itd. Onda ako hoćeš da prikažeš nešto pod određenim kategorijama uradiš select * from recepti where kategorije like '%{$string_sa_kategorijama}%'
[ kelja @ 10.08.2012. 10:54 ] @
Citat:
PHPovac:
Da, osim ako nećeš više kategorija, onda trebaš tri (kategorije, veze_kat, recepti).
Inače fulltext može i na varchar, ja koristim tekst samo za opise i sadržaj.
Ako hoćeš da ti sajt bude jednostavniji, možeš i sa dve trabele, a recept da ima kolonu kategorije gde smeštaš id-ove u formatu 1,2,3,4 itd. Onda ako hoćeš da prikažeš nešto pod određenim kategorijama uradiš select * from recepti where kategorije like '%{$string_sa_kategorijama}%'


Aha, pa kategorije bih svakako smestio u tabelu: id | parent_id | title, a recepti bi imali cat_id, svakako... Pa mogu kombinaciju fulltext searcha i obicne pretrage, kao sto si sugerisao...

Nego, dok smo se dogovarali, likovi su se setili jednog vrlo ''zanimljivog'' dodatka: da li moze automatski da se poveca kolicina sastojaka u skladu sa izabranom porcijom (za dvoje, za troje, itd...) :D

Bojim se da nemam ideju kako ovo uraditi, suvise mogucnosti, suvise formula, svaki recept je jedinstven... :D
[ PHPovac @ 10.08.2012. 10:59 ] @
Pa može ako koristiš odvojenu tabelu. Ako ne onda ništa. Evo sa odvojenom tabelom.
Imaš $kolicina_sastojak npr. 3 a sastojak jaja. To je jedna porcija. Ako korisnik klikne na dve porcije ti proslediš get promenjivu br_p i onda u php kodu proveriš da li je setovana br_p i ako jeste onda količinu sastojaka pomnoži sa br_p pojedinačno za svaki sastojak.
[ kelja @ 10.08.2012. 16:49 ] @
Citat:
PHPovac:
Pa može ako koristiš odvojenu tabelu. Ako ne onda ništa. Evo sa odvojenom tabelom.
Imaš $kolicina_sastojak npr. 3 a sastojak jaja. To je jedna porcija. Ako korisnik klikne na dve porcije ti proslediš get promenjivu br_p i onda u php kodu proveriš da li je setovana br_p i ako jeste onda količinu sastojaka pomnoži sa br_p pojedinačno za svaki sastojak.



Da... tako nekako...
Eh, svakako cu morati dobro da razmislim o dizajnu baze, pre nego sto krenem... precesto im padaju na pamet neke nove mogucnosti, a jos nisam ni poceo da radim. :D

Hvala!
[ kelja @ 15.08.2012. 11:43 ] @
Eh, morace ipak razdvojene tabele... Konacno sam dobio zavrsnu ''listu zelja''. Ako nekog slucajno ne mrzi, nek baci pogled na attachment...

Bice tu slideshow - sa random receptima/linkovima, ''sastojak nedelje'', sa linkovima ka nekoliko random recepata koji koriste taj sastojak...
Sklepao sam neku bazu (imate .sql fajl u attachmentu), ali sad imam izvesne nedoumice oko organizacije admin panela... s obzirom na to sto hoce, bilo bi dobro da prvo naprave ''bazu sastojaka'' -> popune tabelu ''ingredients'', a onda da ide sa popunjavanjem baze receptima... Ono ''racunanje porcija'', o kom smo pricali, moze da se resi i prostim jquery-jem, ako se povecanje/smanjenje porcija radi prostom multiplikacijom™/deljenjem, medjutim... mera, kao sto je, u primeru, ''a pinch of salt'', tesko ce da se uklopi u to... :D

U svakom slucaju, ako vas ne mrzi, bacite oko na postojecu postavku u attachmentu, pa kazite koju - hoce li moci ova organizacija baze da izgura ljuCki ovaj frontend???

Hvala!!!!

[ djoka_l @ 15.08.2012. 12:49 ] @
To što zoveš "završna lista želja" mi ne liči na kraj.

Moram malo da te kritikujem, krenuo si odmah sa dizajnom baze, a da nisi završio ni sistem analizu.

Recimo, sada si dobio želju da staviš sastojak nedelje, a nemaš u bazi recepata, na primer, date_added. Mogao bi, da imaš datum, da pustiš upit koji bi ti rekao koji se satojak najčešće pojavljivao u prošloj nedelji, pa da onda automatski izabereš takav sastojak, ili da daš opciju da urednik prihvati taj sastojak ili odabdere neki svoj po izboru.

Pitanje je da li će i korisnici sajta moći da dodaju recept. Ako mogu, trebalo bi da držiš user_id onga ko je dodao recept.

Bilo bi interesantno imati, na primer kategoriju "Recent recepies" (najnoviji recepti po datumu objavljivanja) "Most popular" (recepti koji su najviše puta pregledani, po nekoj statistici) "User choice" (najbolje ocenjeni recepti od strane korisnika, potrebno je napraviti sistem za ocenjivanje), "Editor's choice" (recepti rangirani po oceni vlasnika sajta).

Loš dizajn baze je i to što si predvideo jednu kategoriju za jedan recept. Šta ako nešto može da bude i predjelo i glavno jelo?
Kategorizacija je slabo zamišljena. Na primer, može biti bitno da li je recept vegetarijanski/veganski ili ne. Da li je za dijabetičare ili ne. Kojoj kuhinji pripada (italijanska, kineska, japanska), da likoristi svinjetinu, govedinu, piletinu, jagnjetinu ili ribu itd..

Možda treba predvideti komentare na recepte.

Koraci su dobar kandidat (onako kako je zamišljen dizajn stranice) da budu razbijeni u više slogova u bazi - jedan korak, jedan slog, mada se meni tako nešto ne sviđa, pa bih ja sugerisao drugačiji dizajn stranice naručiocu.

Što se sastojaka tiče, mislim da je tvoj dizajn noćna mora. Tvoj sastojak nije u šifarniku, pa će chocolate i choclate (ovaj drugi je sa greškom) da budu dva različita sastojka. Zamisli samo muke sa unosom sastojaka. Zamisli recept koji traži 300g slatkovodne ribe, a drugi koji traži 300g šarana. Po kojem kriterijumu uopšte možeš da provališ da su to slični recepti.
[ kelja @ 15.08.2012. 14:01 ] @
Citat:
djoka_l: To što zoveš "završna lista želja" mi ne liči na kraj.


Bojim se da si, nazalost, u pravu, ali sam objasnio da ce novi dodaci da znace i vecu cenu, pa se nadam da ce klijenti imati to u vidu...

Citat:

Moram malo da te kritikujem, krenuo si odmah sa dizajnom baze, a da nisi završio ni sistem analizu.


To je zato sto sam dozivotni amater, pa ne znam ni sta sve 'sistem analiza' podrazumeva, ali, svakako, dobro zvuci. ;)

Citat:

Recimo, sada si dobio želju da staviš sastojak nedelje, a nemaš u bazi recepata, na primer, date_added. Mogao bi, da imaš datum, da pustiš upit koji bi ti rekao koji se satojak najčešće pojavljivao u prošloj nedelji, pa da onda automatski izabereš takav sastojak, ili da daš opciju da urednik prihvati taj sastojak ili odabdere neki svoj po izboru.


Pa datum cu svakako staviti, hvala, a bice i opcija da se 'cekira' sastojak nedelje u admin panelu (mislim da je to najbezbolniji nacin).

Citat:

Pitanje je da li će i korisnici sajta moći da dodaju recept. Ako mogu, trebalo bi da držiš user_id onga ko je dodao recept.

Bilo bi interesantno imati, na primer kategoriju "Recent recepies" (najnoviji recepti po datumu objavljivanja) "Most popular" (recepti koji su najviše puta pregledani, po nekoj statistici) "User choice" (najbolje ocenjeni recepti od strane korisnika, potrebno je napraviti sistem za ocenjivanje), "Editor's choice" (recepti rangirani po oceni vlasnika sajta).


Koliko za sada znam - ne. Bilo bi interesantno, ali nisu to (jos uvek) trazili.

Citat:

Loš dizajn baze je i to što si predvideo jednu kategoriju za jedan recept. Šta ako nešto može da bude i predjelo i glavno jelo?
Kategorizacija je slabo zamišljena. Na primer, može biti bitno da li je recept vegetarijanski/veganski ili ne. Da li je za dijabetičare ili ne. Kojoj kuhinji pripada (italijanska, kineska, japanska), da likoristi svinjetinu, govedinu, piletinu, jagnjetinu ili ribu itd..


Ok... to bi podrazumevalo uvodjenje dodatne tabele za povezivanje recepata i kategorija, ako se ne varam? Kuhinje, vegane, dijabeticare... nisu pominjali... No, u pravu si, svasta im jos moze pasti na pamet...

Potencijalni komentari (+ lajkovanje:)) su jedan od manjih problema, iz ove perspektive gledano...

Koraci - pa vidi, mislim da su ljudi gore dali sasvim zadovoljavajuca resenja, i ne bih bas isao toliko daleko...

Citat:
Što se sastojaka tiče, mislim da je tvoj dizajn noćna mora.


Ok, imas li mozda neki predlog?

Hvala na komentarima i utrosenom vremenu!!!


[ djoka_l @ 15.08.2012. 14:10 ] @
Citat:
Ok, imas li mozda neki predlog?


Lista sastojaka da ide u jedno polje. Odbaciti sve želje tipa, ako je ovo recept za jednu osobu, napravi kako bi izgledalo za 4 osobe. Na formi za unos recepta, jedaa text area za sastojke, a zatim lista ključnih reči, na primer riba, limun, korijander. Ako ne usvojiš takav dizajn, imaćeš glupu situaciju da ti 90% recepata ima sastojak so ili biber što je potpuno bezvezno trošenje resursa.

Sa druge strane, svaki korak poseban red tabele. Na primer, treba predvideti da za svaki korak može da se doda fotografija ili klip. Jako je bitno kako hrana treba da izgleda u međukoracima. Racimo, skoro sam video kuvar za "vesele sendviče" gde se od običnih sastojaka prave sendviči na neobičan način, tipa liče na životinje, kuće, brodove i sl. Tu je bitno objasniti kako se savija salama, ili pravi neka druga dekoracija...
[ kelja @ 15.08.2012. 14:20 ] @
Ok, znaci onda nista od sastojka nedelje? (odnosno, sastojak nedelje ne bi trebalo da bude u zasebnoj tabeli, sa potrebnim dodacima - linkovi, recepti...)?

Hm, da... ti koraci bi mogli da se zakomplikuju, ukoliko im padne na pamet ovo sto si pomenuo...

Hvala jos jednom!

Huh, pocinjem polako da se kajem... :D

[ djoka_l @ 15.08.2012. 14:22 ] @
Evo sada mi pade na pamet: u poslednjem hotelu u kojem sam bio imali su listu alergena označenih bojama (jaja, laktoza, gluten, orašasti plodovi, školjke ...) i u meniju je uz svako jelo bila i obojena oznaka da li sadrži neki od izlistanih alergena.

Sa druge strane, sećeam se da u svakom Hiltonu u kojem sam bio, postoji uz svako jelo slika (svinjče, govedo, riba pile) sa oznakom mesa kao i oznake u boji - mislim da je braon bio "High energy" za jela sa velikom kalorijskom vrednosti, yeleno za "Diet" i još neke boje...
[ djoka_l @ 15.08.2012. 14:43 ] @
Pogledaj, na primer http://www.coolinarika.com
Ima gomilu dobrih rešenja i može da ti da ideje.
[ kelja @ 15.08.2012. 15:10 ] @
Hahahahah, meni je cilj da bude sto jednostavnije. :D
super je kulinarka, ali nece ovima trebati to... :D