select category_id, count(*)
from table
group by category_id order by count(*) desc
vorausgesetzt, Sie eine Tabelle verwenden table
namens
die Gewichte zu erhalten, wie Sie sagten, Sie zwei Abfragen verwenden können:
set @a := (select count(*) from table);
select category_id, count(*)/@a from table group by category_id order by count(*) desc;
vielleicht ist das, was Sie suchen:
(select * from table where category_id = 1 order by rand() limit 50)
union all
(select * from table where category_id = 2 order by rand() limit 25)
union all
(select * from table where category_id = 3 order by rand() limit 25)
Dies gibt Ihnen 100 Zeilen, aufgeteilt 50/25/25 von Kategorie Ids 1,2,3.
Wenn Sie bereits von 'GROUP BY' gedacht haben, dann habe ich verstehe Ihre Frage nicht überhaupt . – hjpotter92
Sie meinen 'ORDER BY' Klausel? – safarov
@safarov Nein, ich meinte GROUP BY. Der Benutzer möchte Ergebnisse bezüglich der Häufigkeit des Auftretens. – hjpotter92