PDA

Pogčedajte punu verziju : RAND za samo odredjene ispise


martinluter
10. 06. 2011., 21:46
Opet ja sa novim problemom i trazenjem odgovora od vas :)

Kako da se kod izlistavanja svih upisa, oni koji su oznaceni kao glavni, npr njih 5, od ukupno 10, RAND prikazuju?
Oni uvek zauzimaju pozicije od 1 do 5, ali bih hteo da se te pozicije tih glavnih 5 upisa menjaju, dok ostalih 5, nebitnih imaju sortiranje po nekom zadatom kriterijumu koji se ne menja.

webarto
10. 06. 2011., 21:48
SELECT upis FROM tabela WHERE glavni = 1 ORDER BY RAND()

Postavi screenshot tabele ili neki query... pretpostavljam da ovo što sam napisao ništa ne znači ali mi nije jasno šta tačno tražiš :)

jablan
10. 06. 2011., 21:53
SELECT * FROM tabela ORDER BY CASE jel_glavni WHEN true THEN RANDOM() ELSE zadati_kriterijum END

ivanhoe
11. 06. 2011., 02:46
sa 2 upita, ovako iz jednog cuga moze, ali je neefikasno.

Uzmi prvo svih 10 oznacenih, pa izaberi random 5. Posle dohvati sortirano sve ostale, osim onih 5. Tako ce ti se koristiti indexi.

martinluter
11. 06. 2011., 13:23
@webarto, to mnog jednostavno, znao sam i ja za to :D
@jablane, to je to, pomoglo mi je.

Moj upit izgleda ovako:

$re=mysql_query("SELECT *, (SELECT vote5 FROM vote WHERE idsmestaja = p.id AND (vote5=0 OR vote5=5) LIMIT 1) AS trenut,
(CASE WHEN `idtip` LIKE '%-5-%' THEN RAND() ELSE 0 END) AS relevance,
(SELECT vote5 FROM vote WHERE idsmestaja = p.id AND (vote5=0 OR vote5=5) LIMIT 1) AS cnt,
(SELECT vote5 FROM vote WHERE idsmestaja = p.id AND ime_prezime='admin' ORDER BY vote5 DESC LIMIT 1) AS tnt
FROM objekti p WHERE id_page=71 AND akt='Y' AND nalageru=1 $uslov AND idtip NOT LIKE '%-3-%'
ORDER BY relevance DESC, pozicija DESC, trenut DESC, cnt DESC, tnt ASC, id DESC LIMIT $str,$ByPage1");

:D sve sam zivo izmesao, al meni zavrsava posao trenutno.
U ovom upitu su iskorosceni saveti koje sam dobio na ovom forumu. Sad nisam siguran da mi je bas sve najasnije, al bitno je da radi. Samo, pitanje je koliko je ovaj upit tezak za bazu?

Hvala na svakoj pomoci do sada!

webarto
11. 06. 2011., 13:29
SQLKiller :D Idi tamo u SQL tab, pokreni query pa vidi za koliko se izvršava, pomnoži to sa brojem korisnika online ili čime već, i sve će ti biti jasno :) Imaš par subselect + LIKE bez indexa + RAND(), samo po sebi ne valja a ovo je loša kombinacija :D

martinluter
11. 06. 2011., 19:00
SQLKiller :D Idi tamo u SQL tab, pokreni query pa vidi za koliko se izvršava, pomnoži to sa brojem korisnika online ili čime već, i sve će ti biti jasno :) Imaš par subselect + LIKE bez indexa + RAND(), samo po sebi ne valja a ovo je loša kombinacija :D

Ha, kazi, oprasan sam :D ?!
Za sada mi je bitno da upit radi, jer i nije prevelika poseta, pa se dobro drzi.
Ovaj jedan LIKE mogu da izbacim, subselecte cu probati da svedem na jedan ili da uradim na drugaciji nacin (mozda ako jedan podatak iz tabele vote, prebacim u tabelu objekti), RAND radi sa samo 10-ak upisa, tako da mislim da nije strasno.
Valjda nije problem da tabelu objekti koja ima 20 kolona, povecam za jos jednu :), sta mislite o tome?
Ono sto me zanima jos je sledece. U nekim tabelama se stalno brise i pise, pri cemu je id (auto increment) negde ogranicen npr na 5 karaktera, a ID se vremenom povecava, sta onda ako se taj broj prevazidje?
Za kasnije cu morati sve to da optimizujem i da bijem glavu. Sad nemam snage da je udarim o zid, premorio sam se :)