Valcha Posted August 26, 2004 Report Share Posted August 26, 2004 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 More sharing options...
Gacha Posted August 26, 2004 Report Share Posted August 26, 2004 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 More sharing options...
Venom Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
Kaklz Posted August 27, 2004 Report Share Posted August 27, 2004 (edited) 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 August 27, 2004 by Kaklz Link to comment Share on other sites More sharing options...
azpage Posted August 27, 2004 Report Share Posted August 27, 2004 (edited) 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 August 27, 2004 by azpage Link to comment Share on other sites More sharing options...
Gacha Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
azpage Posted August 27, 2004 Report Share Posted August 27, 2004 ORDER BY RAND() ASC Kā strādā šī rinda, diezgan neloģiski izskatās? Vai tad pēc by nav jābūt lauka nosaukumam? Link to comment Share on other sites More sharing options...
azpage Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
Gacha Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
Gacha Posted August 27, 2004 Report Share Posted August 27, 2004 PS. tolks glabāt DB tev to bildes path ? tas tik lieki aizņem vietu! Link to comment Share on other sites More sharing options...
azpage Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
azpage Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
Gacha Posted August 27, 2004 Report Share Posted August 27, 2004 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 More sharing options...
bubu Posted August 27, 2004 Report Share Posted August 27, 2004 (edited) Šis ļoti labs pieprasījums. Edited August 27, 2004 by bubu Link to comment Share on other sites More sharing options...
Roze Posted August 30, 2004 Report Share Posted August 30, 2004 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 More sharing options...
Recommended Posts