ユーザーが投票できるアプリがあり、2つのテーブルがあります
ビデオ
| id |uri_code|ファイル名|created_on|削除済み|
投票
| id | video_id | ip | created_on |
すべてのビデオ情報を選択し、各ビデオの総投票数を取得できるようにしたいのですが、これはsqlステートメントで可能ですか、それともサーバー側のコードで行うのが最善でしょうか?
ユーザーが投票できるアプリがあり、2つのテーブルがあります
ビデオ
| id |uri_code|ファイル名|created_on|削除済み|
投票
| id | video_id | ip | created_on |
すべてのビデオ情報を選択し、各ビデオの総投票数を取得できるようにしたいのですが、これはsqlステートメントで可能ですか、それともサーバー側のコードで行うのが最善でしょうか?
それは確かにSQLで可能です-この種のことはまさにSQLが得意なことです!あなたはビデオごとにすべての投票の数を「グループ化」したいので、そのGROUP BY
条項はまさにあなたが求めているものです:
SELECT Video.*, COUNT(*)
FROM Video JOIN Votes ON Votes.video_id = Video.id
GROUP BY Video.id;
select vi.*, count(vo.id) as votes
from video vi
inner join votes vo on vi.id = vo.video_id
group by vi.id
多分このようなもの:
SELECT
Video.id,
Video.uri_code,
Video.filename,
Video.created_on,
Video.deleted,
(
SELECT
COUNT(*)
FROM
Votes
WHERE
Votes.video_id=Video.id
) AS Total
FROM
Video
こんにちはここでmysqlクエリを使用できます
1.他の条件なしで動画の総投票数のみを取得する必要がある場合
SELECT count( Votes.id ) AS total_vote, Video. *
FROM Video
LEFT JOIN Votes ON Video.id = Votes.video_id
WHERE Video.deleted = '1'
GROUP BY Video.id
2.いくつかの条件で動画の合計投票数を取得する必要がある場合、たとえば、削除された動画の場合は0と1の値0、列挙型の削除された値の場合は1であり、削除されていない動画の投票の詳細を取得する必要がある場合
SELECT count( Votes.id ) AS total_vote, Video. *
FROM Video
LEFT JOIN Votes ON Video.id = Votes.video_id
WHERE Video.deleted = '0'
GROUP BY video.id