webForumDet fria alternativet

Sortera lite knepigt?

1 svar · 318 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 538 inlägg
#1

Jag har en enkel sql:

Select id,cnt From tbl LIMIT 0,10

Men nu till sorteringen:
Den listar ju tio stycken rader i detta fall och nu skulle jag vilja att den först skall få fram 5 stycken med högst cnt-värde.
Sedan så vill jag få fram slumpvisa rader ur tabellen.
Man skulle ju kunna tänka sig en union men vet inte om det är så bra det heller.

[s]Select id,cnt From tbl LIMIT 0,5 order by cnt
union all
Select id,cnt From tbl LIMIT 0,5 order by rand()[/s]

Funkar inte med två order by.
Databas är mySql 5.

Helst så skulle jag även vilja mixa de högsta värdena med de slumpmässiga och se till att de alltid är unika rader. Så att inte vissa återkommer.

spangoMedlem sedan juni 20006 147 inlägg
#2

Kanske så här? Om raden är en av topp-5 sorterar du på hur många med mindre cnt det finns, annars sorterar du på nåt slumpmässigt. Totalt freestylat:

select 
	id, 
	cnt, 
	(select count(*) from tabellen t2 where t2.cnt < t1.cnt) as less_cnt
from
	tabellen t1
order by 
case 
	when less_cnt < 5 then less_cnt
	else rand() + 5
end case
Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb