0

iPhoneアプリの動画のトレンドフィードを作成し、過去24時間の動画のすべての視聴回数を視聴回数テーブルで計算しています(視聴回数とタイムスタンプとビデオIDを持つたびに、視聴回数テーブルに行が追加されます)。無限スクロールを実行すると、最後のビデオビューのカウントが返され、mySQLのHAVINGステートメントを使用して次のビデオを取得します

"HAVING COUNT(views.videoid) < 'count of views'" with a "LIMIT 10"最後に一度に10を選択します。

これは機能しますが、過去24時間に動画の再生回数が別の動画と同じである場合、その動画は<ステートメントであるためスキップされる可能性があります。また、<=ステートメントを使用すると、動画が複数回表示されます。

ビデオIDの後にビデオを選択する方法はありますか?

"ORDER BY COUNT(views.videoid) DESC"

次のビデオを並べるには?おそらくそうではありませんが、私がそれをどのように行うかを誰かが知っていますか。これが私の質問です。

SELECT f.userid, f.username, video.videoid, video.videolink, video.timestamp, video.caption, video.tags, video.address, video.likecount, video.commentcount, video.viewcount, video.shareid, CASE WHEN liketable.likekey > 0 THEN 1 ELSE 0 END AS didlike, COUNT(views.videoid) AS trendcount

FROM user AS f

RIGHT JOIN video ON video.userid = f.userid

LEFT JOIN user ON user.token = ?

LEFT JOIN liketable ON liketable.videoid = video.videoid AND liketable.userid = user.userid

RIGHT JOIN views ON views.videoid = video.videoid

WHERE views.timestamp > ?

GROUP BY video.videoid

HAVING COUNT(views.videoid) < ?

ORDER BY COUNT(views.videoid) DESC

LIMIT 10
4

1 に答える 1

2

LIMIT でオフセットを使用できます。

SELECT [...] LIMIT 20,10;

これにより、結果の行 20 から始まる 10 行が取得されます。

次に、ORDER BY をカウントとビデオ ID で並べ替えるように設定すると、常に同じ順序で結果が得られるため、スキップする必要はありません。

于 2012-08-09T17:05:17.577 に答える