1

私はこのphp/sqlクエリを持っています:

$result = mysql_query("
            SELECT r.item_id, AVG(rating) AS avgrating, count(rating) AS count, i.item, c.category
            FROM ratings AS r
            LEFT JOIN items AS i
            ON r.item_id = i.items_id
            INNER JOIN master_cat c
            ON c.cat_id = i.cat_id
            GROUP BY item_id 
            ORDER BY avgrating DESC 
            LIMIT 25;");

これを出力すると、カウントが正しく、特定のアイテムが受け取った投票数が表示されます。

単に句を追加したいのですWHERE count >= 10が、すべてが壊れています。明らかに、何千ものアイテムがある場合、一部のアイテムは1票を獲得し、100%になります。しかし、それは良い指標ではありません。10票以上のアイテムを印刷したい(またはcount >= 10

4

3 に答える 3

2

having代わりに使用する必要がありますwhere

SELECT 
    r.item_id, AVG(rating) AS avgrating, 
    count(rating) AS count, i.item, c.category
FROM 
    ratings AS r
    LEFT JOIN items AS i
        ON r.item_id = i.items_id
    INNER JOIN master_cat c
        ON c.cat_id = i.cat_id
GROUP BY 
    item_id 
HAVING
    count >= 10
ORDER BY 
    avgrating DESC 
LIMIT 25;
于 2012-09-03T16:31:24.547 に答える
1

何を数えたいかを伝える必要があります

having count(*) > 10
于 2012-09-03T16:32:15.663 に答える
1

where集計関数()の結果にフィルターを使用することはできませんcount()whereDBが結果セットに行を含めるかどうかを決定しているため、行レベルで適用されます。この時点では、カウントの結果はまだ利用できません。

必要なのは、havingすべての集計結果が計算された後、結果がクライアントに送信される前の最後のステップの1つとして適用される句です。

...
GROUP BY item_id
HAVING count > 10
ORDER BY ...
于 2012-09-03T16:33:04.017 に答える