1

ユーザーが写真/ビデオ/オーディオなどを評価できる評価システムを作成しようとしています。現在、2つのテーブルがあります。

Table: products
Cols:  product_id[PK] | name | category | type | link

これは製品テーブルであり、製品に関する情報が含まれています。製品に戸惑う方は、「製品」を画像/ビデオ/オーディオと考えてください。わかりやすくするために、このように名前を付けました。2番目の表は評価です

Table: product_ratings
Cols:  rating_id[PK] | rating | product_id | timestamp

このテーブルには、ユーザーが付けた評価に関する情報が格納されます。

すべての「製品」について(平均して)最高の評価が表示されるページが必要です。これまでのところ、SAを調べて、次のコードを見つけました。

SELECT
p.product_id, p.name,
AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
WHERE p.product_id = 1

これは、特定のproduct_idの平均評価を返すだけです。すべてのproduct_idとその平均評価を取得するにはどうすればよいですか。また、PHPを介して最高の評価を見つけるにはどうすればよいですか。

私はもう試した:

WHERE p.product_id < 1 AND p.product_id < 30

しかし、これは2のproduct_idを返すだけで、その名前とaverage_ratingがわかりません。

ガイダンス/資料へのリンクは大歓迎です

4

3 に答える 3

4

ちょうど試して:

SELECT
p.product_id, p.name,
AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id

また、これは無意味な表現です。

WHERE p.product_id < 1 AND p.product_id < 30

それは完全に同等だからです

WHERE p.product_id < 1

そして私はあなたがゼロ以下のIDを持っているとは思わない

于 2010-11-18T16:59:35.620 に答える
4
SELECT
    p.product_id,
    p.name,
    AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
GROUP BY p.product_id
ORDER BY rating_average DESC
LIMIT 1
于 2010-11-18T16:59:54.607 に答える
0

クエリは終了しました。すべてをフィルタリングするWHERE句を削除するだけです。

SELECT     p.product_id, p.name,
           AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
ORDER BY rating_average DESC

これにより、各製品の平均が返され、結果セットの上部にある最高の平均評価でソートされます。

于 2010-11-18T17:00:27.710 に答える