0 レビュー
2 回答
php-MySQL、別のテーブルで最も頻繁な値を持つ行を選択する必要があります
私はSQLに慣れていないので、問題の解決策を見つけることができません。 2つのテーブルがあります。表Aには、それぞれが一意のIDを持つ多くのコメントを格納しています。
表Bには、日時付きのすべてのコメントに対するすべての投票(like=1およびdislike=0)が格納されています。投票ごとにエントリがあるため、表Aのコメントごとに大量の行があります。
すべてのコメントを取得して、毎週最も気に入ったコメントが一番上になるように並べ替える必要がありますが、方法がわかりません。
これまでのところ、これがありますが、続行する方法がわかりません:
SELECT * FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1
明確にするために、過去1週間に評価が1のログからすべてのエントリを取得し、最も頻度の高いc_idで降順に並べ替え、行ごとに個別のc_idを取得する必要があります...それが理にかなっている場合
十分に明確にできなかった場合は、質問してください。ありがとうございます!!
わからない
0
レビュー
答え :
解決策:
SELECT *
FROM comment
INNER JOIN (SELECT comment.c_id,
COUNT(*) AS cnt
FROM comment
INNER JOIN logs ON comment.c_id=logs.c_id
WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY)
AND logs.rated=1
GROUP BY comment.c_id) x ON x.c_id = comment.c_id
ORDER BY x.cnt DESC
わからない
0
レビュー
答え :
解決策:
これを試してください-
最初に、評価が1で、現在の日付から7日であり、c_idのカウントに基づいて並べ替えられたログテーブルのすべてのレコードを照会しました。次に、これをCOmmentsテーブルに結合しました。
SELECT Comment.* FROM comment C
INNER JOIN (SELECT logs.c_id as c_id,count(logs.c_id) as logcount FROM logs
WHERE logs.rated=1
AND logs.daterate BETWEEN GETDATE() AND DATEADD(day,-7,getdate())
Group by logs.c_id
order by count(logs.c_id) desc) X
ON C.c_id = X.c_id
ORDER BY X.logcount DESC
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。