webForumDet fria alternativet

Sortera lite knepigt?

Databaser & SQL

1 svar · 318 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#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.

Medlem sedan juni 20008 205 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
257 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)