program2 exports the playlists
This commit is contained in:
@@ -1,10 +1,136 @@
|
||||
CREATE TABLE IF NOT EXISTS video_summary AS
|
||||
SELECT v.file_name,
|
||||
GROUP_CONCAT(DISTINCT l.name) AS labels,
|
||||
GROUP_CONCAT(DISTINCT p.name) AS playlists
|
||||
SELECT
|
||||
v.file_name,
|
||||
v.raw_file,
|
||||
v.mp4_file,
|
||||
v.record_datetime,
|
||||
v.day_of_week,
|
||||
v.difficulty_level,
|
||||
v.address,
|
||||
GROUP_CONCAT(DISTINCT l.name) AS labels,
|
||||
GROUP_CONCAT(DISTINCT p.name) AS playlists
|
||||
FROM videos v
|
||||
LEFT JOIN video_labels vl ON vl.video_file_name = v.file_name
|
||||
LEFT JOIN labels l ON l.id = vl.label_id
|
||||
LEFT JOIN video_playlists vp ON vp.video_file_name = v.file_name
|
||||
LEFT JOIN playlists p ON p.id = vp.playlist_id
|
||||
GROUP BY v.file_name;
|
||||
|
||||
DROP VIEW playlist_videos;
|
||||
CREATE VIEW playlist_videos AS
|
||||
WITH
|
||||
-- Sous-requête pour les playlists manuelles
|
||||
manual_playlist_videos AS (
|
||||
SELECT
|
||||
p.id AS playlist_id,
|
||||
p.name AS playlist_name,
|
||||
vp.video_file_name,
|
||||
v.*,
|
||||
'manual' AS playlist_type
|
||||
FROM playlists p
|
||||
JOIN video_playlists vp ON p.id = vp.playlist_id
|
||||
JOIN videos v ON vp.video_file_name = v.file_name
|
||||
WHERE p.type = 'manual'
|
||||
),
|
||||
|
||||
-- Sous-requête pour les playlists dynamiques
|
||||
dynamic_playlist_videos AS (
|
||||
SELECT DISTINCT
|
||||
p.id AS playlist_id,
|
||||
p.name AS playlist_name,
|
||||
v.file_name AS video_file_name,
|
||||
v.*,
|
||||
'dynamic' AS playlist_type
|
||||
FROM playlists p
|
||||
JOIN videos v
|
||||
WHERE p.type = 'dynamic'
|
||||
-- Inclure les vidéos qui ont les labels requis
|
||||
AND (
|
||||
json_array_length(json_extract(p.rules_json, '$.include_labels')) = 0
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM labels l
|
||||
JOIN video_labels vl ON l.id = vl.label_id
|
||||
WHERE vl.video_file_name = v.file_name
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM (
|
||||
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
|
||||
-- Ajoute plus de lignes si tes tableaux JSON ont plus de 5 éléments
|
||||
) n
|
||||
WHERE n.n < json_array_length(json_extract(p.rules_json, '$.include_labels'))
|
||||
AND l.name = json_extract(
|
||||
json_extract(p.rules_json, '$.include_labels'),
|
||||
'$[' || n.n || ']'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
-- Exclure les vidéos qui ont les labels exclus
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM labels l
|
||||
JOIN video_labels vl ON l.id = vl.label_id
|
||||
WHERE vl.video_file_name = v.file_name
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM (
|
||||
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
|
||||
) n
|
||||
WHERE n.n < json_array_length(json_extract(p.rules_json, '$.exclude_labels'))
|
||||
AND l.name = json_extract(
|
||||
json_extract(p.rules_json, '$.exclude_labels'),
|
||||
'$[' || n.n || ']'
|
||||
)
|
||||
)
|
||||
)
|
||||
-- Inclure les vidéos qui sont dans les playlists requises
|
||||
AND (
|
||||
json_array_length(json_extract(p.rules_json, '$.include_playlists')) = 0
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM playlists pl
|
||||
JOIN video_playlists vp ON pl.id = vp.playlist_id
|
||||
WHERE vp.video_file_name = v.file_name
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM (
|
||||
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
|
||||
) n
|
||||
WHERE n.n < json_array_length(json_extract(p.rules_json, '$.include_playlists'))
|
||||
AND pl.name = json_extract(
|
||||
json_extract(p.rules_json, '$.include_playlists'),
|
||||
'$[' || n.n || ']'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
-- Exclure les vidéos qui sont dans les playlists exclues
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM playlists pl
|
||||
JOIN video_playlists vp ON pl.id = vp.playlist_id
|
||||
WHERE vp.video_file_name = v.file_name
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM (
|
||||
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
|
||||
) n
|
||||
WHERE n.n < json_array_length(json_extract(p.rules_json, '$.exclude_playlists'))
|
||||
AND pl.name = json_extract(
|
||||
json_extract(p.rules_json, '$.exclude_playlists'),
|
||||
'$[' || n.n || ']'
|
||||
)
|
||||
)
|
||||
)
|
||||
-- Filtrer par date si nécessaire
|
||||
AND (
|
||||
json_extract(p.rules_json, '$.date_after') IS NULL
|
||||
OR v.record_datetime >= json_extract(p.rules_json, '$.date_after')
|
||||
)
|
||||
AND (
|
||||
json_extract(p.rules_json, '$.date_before') IS NULL
|
||||
OR v.record_datetime <= json_extract(p.rules_json, '$.date_before')
|
||||
)
|
||||
)
|
||||
|
||||
-- Union des deux types de playlists
|
||||
SELECT * FROM manual_playlist_videos
|
||||
UNION ALL
|
||||
SELECT * FROM dynamic_playlist_videos;
|
||||
|
||||
Reference in New Issue
Block a user