2012-04-02 9 views
0

Wie ist die typische Methode, um Ergebnisse in MYSQL zu wiegen?MYSQL wiegen Ergebnisse

Ich habe eine Tabelle mit einer Spalte namens 'category_id', die von 1-10 geht.

Wie gewichte ich Ergebnisse, so dass eine höhere Häufigkeit der Ergebnisse mit einer Kategorie_id angezeigt wird, im Vergleich zu anderen?

+0

Wenn Sie bereits von 'GROUP BY' gedacht haben, dann habe ich verstehe Ihre Frage nicht überhaupt . – hjpotter92

+0

Sie meinen 'ORDER BY' Klausel? – safarov

+0

@safarov Nein, ich meinte GROUP BY. Der Benutzer möchte Ergebnisse bezüglich der Häufigkeit des Auftretens. – hjpotter92

Antwort

1
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.

+0

Danke Jeffrey. Ich meinte eigentlich nicht, die Frequenz zu finden. Ich habe versucht, eine Möglichkeit zu finden, eine Abfrage zu schreiben, die eine bestimmte Frequenz erzeugt. – user1124535

+0

Jeff - das gibt Ihnen die Gewichte aus den Ergebnissen. – user1124535

+0

Gibt es eine Möglichkeit, es so zu schreiben, dass 25% der Ergebnisse immer category_id = 1 haben? – user1124535

2

, wenn Sie bevorzugen wollen, sagen wir, Kategorie 5, können Sie etwas in den Zeilen tun:

select id, description 
from your table 
where yourcondition='conditionvalue' 
order by 
    case category 
     when 5 then 0 
     else 1 
    end, 
    category