Jump to content
php.lv forumi

random bilžu atlase


Valcha

Recommended Posts

Es te skatīju cauri un brīnījos, kādēļ visi runā par nezkādiem tur specifiskiem php random ciklu skriptiem, lai, piemēram, izdabūtu randomā banerus. Es pamēģināju SELECT *... WHERE ... GROUP BY RAND (). Un man randoms uz atselektētajiem pēc kritērijiem baneriem darbojas. Vai ir kāds iemesls, kādēļ visi šo parasto MySQL fīču neizmanto? Esmu iesācējs iekš PHP, tādēļ varbūt jautājums tāds dikti vienkāršs :)

Kādēļ neizmantot GROUP BY RAND () ???

Link to comment
Share on other sites

Ne vienmēr šis variants derēs! Man ir galerija ar apakšadaļām un lai to izsauktu izmantoju 2 tabulu apvienošanu un man tas neder, bet domāju, ka lielākoties gadījumu tas der!

Link to comment
Share on other sites

2Gacha: pamēģini nevis GROUP BY, bet ORDER BY RAND()

 

att. uz banneriem tur sava "psiholoģija"

datu bāzē tev, piem. stāvēs:

banneris1|parādīt 1000000 reižu

banneris2|parādīt 50 reižu

 

Izvēloties ar RAND() izvēlēties katru no tiem potenciāla iespēja 50% (vai nu viens, vai nu otrs). Tomēr, banneru gadījumā apmaiņu sistēmas ir ieinteresētas "racionalizēt" banneru rādīšanu - tos 50 rādīšanas sadalot vienlīdzīgi starp to miljonu (ok, utrēts piemērs, parasti sistēmā grozās ap 1000 "izlīdināmo banneru"), pie tam ļoti-ļoti vēlams, lai katrai atsevišķai lapai pēc kārtas neatrādītos viens un tāds pats banneris pēc kārtas. Resp., sistēma ir ieinteresēta pēc iespējas ātrāk izrādīt to miljonu, pa brīdim sašķaidot to ar citiem bannerīšiem.

Link to comment
Share on other sites

Es te skatīju cauri un brīnījos, kādēļ visi runā par nezkādiem tur specifiskiem php random ciklu skriptiem, lai, piemēram, izdabūtu randomā banerus. Es pamēģināju SELECT *... WHERE ... GROUP BY RAND (). Un man randoms uz atselektētajiem pēc kritērijiem baneriem darbojas. Vai ir kāds iemesls, kādēļ visi šo parasto MySQL fīču neizmanto? Esmu iesācējs iekš PHP, tādēļ varbūt jautājums tāds dikti vienkāršs :)

Kādēļ neizmantot GROUP BY RAND () ???

grupēšana noteikti strādās ilgāk par sakārtošanu, tāpēc parasti izmanto SELECT * FROM tabula ORDER BY RAND() ASC;

Edited by Kaklz
Link to comment
Share on other sites

Ne vienmēr šis variants derēs! Man ir galerija ar apakšadaļām un lai to izsauktu izmantoju 2 tabulu apvienošanu un man tas neder, bet domāju, ka lielākoties gadījumu tas der!

 

Veidoju galeriju ar apakšgalerijām un līdz ar to jautājumi. Tabulu struktūra:

 

main_albums

id

title

...

 

albums

id

main_album_id

title

...

 

photos

id

album_id

...

 

main_albums -> albums -> photos

 

Kaa lai izvadu, piem. pēdējās 20 bildes, lapā, kurā ir redzami apakšalbūmu, respektīvi, izvēloties, kuru main_album parādīt.

 

Izvadīt pēdējās 20 bildes albūma lapā nav problēmu:

SELECT * FROM photos WHERE album_id=xxxx ORDER BY id DESC LIMIT 0,20

 

Pieprasījums, kurš izvada pēdējās kaada no main_album bildēm.

SELECT photos.id, photos.path FROM photos, albums WHERE photos.album_id=album.id AND album.main_album_id=xxxx ORDER BY photos.id DESC LIMIT 0,20

 

Šis pieprasījums strādā, taču vai tas ir ātrs, vai ir labāks risinājums ?

 

Pie reizes vel viens jautājums vai ir kāda atšķirība, ja vajag pirmos 20 ierakstus, rakstot LIMIT 0,20 vai LIMIT 20.

 

Vai kādam jau ir apskatāma gatava galerija, kura būtu ar apakšgalerijām?

Edited by azpage
Link to comment
Share on other sites

2venom - Man nesanāk ne ar order ne ar group. Jo man ir tā, ka izvadītās bildes tiek grupētas pēc sec_id(sadaļa) un šīs sadaļas tiek sakārtotas pēc ID desc. Vismaz es nevaru iedomāties, kā varētu ar sql paņemt un parādīt random bildi!

Link to comment
Share on other sites

Kapēc random bildi nevar izvadīt ar limit - ja vien nepieciešama viena random bilde?

 

SELECT id, path FROM photos ORDER BY id ASC LIMIT (funkcija, kas atgriež rindu skaitu kopā ar radom funkciju),1

 

Nezinu tās funkcijas, tādēļ rakstu iekavās aprakstu.

Link to comment
Share on other sites

Bik tevi nesapratu ;) par to, ko tu gribi darīt ar tām sadaļām, bet LIMIT 0. 20 un LIMIT 20 man liekas nekāda atšķirība nav.

 

un par to ORDER BY RAND() ASC te jau slēpjas tas joks, ka viņš pats izštuko pēc o kārtot :)

Link to comment
Share on other sites

Man netiek glabāta pilna adrese, no adrese www.adrese.lv/galerija/bildes/kat1/apkat1/bilde1.jpg man datubaazee glabaas "/kat1/apkat1" un vel otraa laukā faila nosaukums "bilde1.jpg". Tas tādēļ, ka bildei var buut thumb-izmērs, 800x600, utt, līdz ar to starp "/kat1/apkat1" pa vidu iet vajadzīgas izmērs, piem. "/thumb/", un tad seko "bilde1.jpg".

 

Ir kāds labāks risinājums, sakarā ar bildes ceļiem?

Link to comment
Share on other sites

Nju kaa lai izskaidro, ko gribu dariit ar sadaļām?

 

Pirmajā fotogalerijas lapā parādās visas galerijas (katra galerija satur albūmus, bildes var pievienot tikai albūmam, nevis galerijai)

 

Uzspiežot uz kaadu no galerijām, lapā tiek izvadīti visi albūmu. Un zem visiem tiem albūmiem gribi parādīt pēdējās 20 bildes, kuras atrodas izvēlētajā galerijā, taču var atrasties dažādos albūmos.

 

Un lūk pieprasījums :

SELECT photos.id, photos.path FROM photos, albums WHERE photos.album_id=album.id AND album.main_album_id=xxxx ORDER BY photos.id DESC LIMIT 0,20

 

xxxx-izveeleetas galerijas ID

 

Šis pieprasījums strādā. Jautājums, vai šis ir labs pieprasījums, varbūt ir labāki, ātrāki, īsāki?

Link to comment
Share on other sites

Nu es glabāju DB tikai bildes nosaukumu, sadaļu un ID un vēl šo to. Man ir lapa.lv/bildes/{sadaļas ID}/{te 2 folderi - big, small}/bilde.jpg

 

Man šķiet, ka tavs SQL pieprasījums ir normāls, ja tev būtu savādāka DB struktūra, tad varētu savādāk, bet šitā man liekas tev ir labi.

Link to comment
Share on other sites

Kādēļ neizmantot GROUP BY RAND () ???

 

Pareizaak kaa jau cilveeki saka or ORDER BY, bet neizmanto(ja) tapeec ka saakotneejiem mysql 3.x gadijumaa skaitlju gjeneraators bija diezgan neunikaals, proti it iipashi pie saliidzinoshi maz ierakstiem principaa tika atgriezts lielaakoties viens un tas pats ieraksts - tai pashaa laikaa php randomizers bija nedaudz speecigaaks.

 

Uz sho briidi eertaak un logjiskaak jau ir lietot mysql gadijuma ierakstu atgriezshanas variantu nevis selecteet visu db un tad ar php atlasiit.

Link to comment
Share on other sites

×
×
  • Create New...