0

これはすぐに非常に複雑になるのではないかと心配していますが、最新の「アクティビティ」を「人気」順で表示する最善の方法は何か疑問に思っています。可能であれば、「いいね!」を 2 倍のビューとしてカウントしますか?)。

したがって、ビュー数やいいね! を付けた投稿でいっぱいのデータベースがある場合、過去 24 時間以内に最も人気のある上位 5% の投稿を表示できるようにしたいと考えています。

これには3つのテーブルがあり、1つは投稿用、2つはいいねとビュー用です(1行= 1いいね/ビュー)

表 1 = 「投稿」

id | title | timestamp | etc.

表 2 = "posts_likes"

post_id | user_id

表 3 = "posts_views"

post_id | user_id

MySQL + PHP を使用して、このクエリを実行して、計算された全体的な人気度で投稿を並べ替える最良の方法は何でしょうか?

どうもありがとう、ティム

4

2 に答える 2

1

私が使用するアイデアを示すために、疑似SQLをいくつか提供します。不足しているビットを追加して、機能させることができます。上位 5% は投稿数に基づいていると想定していますが、いいねとビューのスコアに基づいている場合は、簡単に調整できるはずです。

SET @foo=0.05 * select count(*) from posts where (timestamp < today - 24 hours); 
PREPARE STMT FROM 'SELECT posts,sum(likes) * 2 + sum(views) as POPULAR FROM (tables joined) ORDER BY popular LIMIT ?';
EXECUTE STMT USING @foo;

よろしく、

于 2013-02-05T13:49:24.067 に答える
1

現在、MySQL サーバーにアクセスできないため、これをテストすることはできませんが、次のクエリで開始できます。

SELECT p.id, p.title, ((COUNT(l.id) * 2) + COUNT(v.id)) AS popularity 
    FROM posts p 
        LEFT JOIN posts_likes l ON l.post_id = p.id 
        LEFT JOIN posts_views v ON v.post_id = p.id 
    WHERE p.timestamp > (UNIX_TIMESTAMP()-86400)
    GROUP BY p.id
    ORDER BY popularity DESC LIMIT :return_limit

クエリを実行するときは、パラメーターを渡す必要があります。これは、過去 24 時間のすべての投稿の:return_limit5% である必要があります。COUNT()

于 2013-02-05T14:23:45.133 に答える