私はMySQLにこれらの2つのテーブルを持っています
.「tag_name」には、tag_name_id
作成された個々のタグの一意のものが含まれ、それぞれのtag
「tags」には、一意tags_id
の、timecode
(時刻)、およびgroup_id
(同じタグが異なるgroup_idを持つことができます)も含まれています.
今、私がやろうとしているのはtimecode
、最初の 10 秒間のどこかでランダムを取得することです ( timecode <= 10
)。その後、抽出されたタイムコードに従って、3 秒以上離れているすべての結果を選択してみてください。(3 秒未満の結果はすべて破棄する必要があります)。
例:
データベースにこれらの結果がある場合:
2,3,4,4,6,13,14,17,18,18,21,25,28,28,etc (timecodes)
最初の 10 個のうちの 1 つをランダムに取得し (4 つを選択するとします)、その時点に従ってそれらをランダムに並べ替えたいと考えています。(「ランダムに」同じタイムコードインスタントが表示されたときに順序を変更したいため、つまり「4,4」は異なるタグに関連付けられているため、それらを「切り替え」て、別のものを選択できるようにするためです毎回)
したがって、結果クエリは次のようになりました:4、13、17、21、25、28など
私はすでに乱数を返すこのクエリを持っています。今朝、答えがそこにあると思うので、Select 内で Select を作成しようとしましたが、必要な結果を取得できません。 3 離れた結果を取得する方法が見つからない...
SELECT tag_name.tag, ROUND(avg(timecode)) as timecode, group_id
FROM tags
INNER JOIN tag_name
ON tag_name.tag_name_id = tags.tag_name_id
WHERE tags.filename = 'filename.mp4' AND timecode <= 10
GROUP BY group_id, tag_name.tag
ORDER BY RAND()
LIMIT 1
ここにSQLFiddleがあります