根据特定设备上的视频记录查询所有兄弟视频记录
Query all siblings of video records according to those on a specific device
我已经将我的(几乎完整的)目录和文件名从多个存储设备存储在 MariaDB 数据库中。这里我有两个 table,DeviceNames 和 Dirs_and_Files。 Table DeviceNames 包含两个字段。字段 F_NR 是唯一的,其中包含特定存储设备的编号。字段 D_Name 包含存储设备的名称。
这里存放我所有的存储设备。
MariaDB [DevicesPool]> show columns from Devices;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| D_Nr | varchar(2) | NO | PRI | NULL | |
| D_Name | varchar(50) | NO | | NULL | |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.001 sec)
Example records in table Devices:
01 Toshiba-1TB
02 Western-Digital-500GB
03 Seagate-4TB
04 Western-Digital-2TB
...
98 Zyxel-NAS
第二个table,Dirs_and_Files,包含以下字段:LNR是一个唯一的整数值,auto_incremented,字段D_Nr包含设备的编号路径和文件的存储位置。
此 D_Nr 值应与 table 设备中的 D_Nr 字段匹配。文件名字段包含存储文件的基本名称(文件名)。字段 Path_and_File 包含整个路径和文件名。
MariaDB [DevicesPool]> show columns from Dirs_and_Files;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| LNR | int(11) | NO | PRI | NULL | auto_increment |
| D_Nr | varchar(2) | NO | | NULL | |
| Filename | varchar(100) | NO | | NULL | |
| Path_and_File | varchar(250) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
4 rows in set (0.000 sec)
Example records for Dirs_and_Files:
01 01 King_Kong.mp4 /Medien/Filme/King_Kong.mp4
02 01 Airport.mp4 /Medien/Filme/Airport.mp4
03 02 Black_Panther.mp4 /Movies/Films/Black Panther.mp4
04 03 Shining.mp4 /Daten/Filme/Shining.mp4
05 03 King_Kong.mp4 /Daten/Filme/King_Kong.mp4
06 04 Alien.mp4 /Daten/Science/Alien.mp4
...
1412 98 Black_Panther.mp4 /home/user/Black_Panther.mp4
首先,我只想列出在 table Dirs_and_Names 中出现不止一次的所有文件(mp4 视频)。当我从 Dirs_and_Files 收到编号为 01、03、05 和 98 的记录时,这个主题就解决了。我已经有一个查询来执行此操作。
这是仅列出多个视频的查询命令:
SELECT d.Path_and_File, p.D_Name
FROM Dirs_and_Names d
LEFT JOIN DeviceNames p
ON d.D_Nr = p.D_Nr
INNER JOIN
(SELECT Filename
FROM Dirs_and_Names
WHERE Filename RLIKE "[.]mp4$"
GROUP by Filename
HAVING COUNT(Filename) > 1
) temp
ON d.Filename= temp.Filename
ORDER BY d.Filename;
现在我想列出存储在 table Dirs_and_Names 中的所有多个文件(mp4 视频),这些文件在特定设备编号 (D_Nr) 上具有兄弟文件。
在这种情况下,我想列出“Black_Panther.mp4”及其副本,它们也存储在设备号 98 和 02 上。
其他未存储在设备“98”上,因此应跳过。
如何在我的数据库中查询 table Dirs_and_Names 中的所有多个 mp4 视频文件(文件名),这些文件在特定设备编号 (D_Nr = 98) 上有同级文件?
感谢您的耐心等待,
-Linuxfluesterer
考虑在另一个 Dirs_and_Names
上添加 INNER JOIN
以在特定设备上过滤:
SELECT d.Path_and_File, p.D_Name
FROM Dirs_and_Names d
LEFT JOIN DeviceNames p
ON d.D_Nr = p.D_Nr
INNER JOIN
(SELECT Filename
FROM Dirs_and_Names
WHERE Filename RLIKE "[.]mp4$"
GROUP by Filename
HAVING COUNT(Filename) > 1
) agg
ON d.Filename= agg.Filename
INNER JOIN Dirs_and_Names d2
ON agg.Filename = d2.Filename
AND d2.D_Nr = 98
ORDER BY d.Filename;
我已经将我的(几乎完整的)目录和文件名从多个存储设备存储在 MariaDB 数据库中。这里我有两个 table,DeviceNames 和 Dirs_and_Files。 Table DeviceNames 包含两个字段。字段 F_NR 是唯一的,其中包含特定存储设备的编号。字段 D_Name 包含存储设备的名称。
这里存放我所有的存储设备。
MariaDB [DevicesPool]> show columns from Devices;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| D_Nr | varchar(2) | NO | PRI | NULL | |
| D_Name | varchar(50) | NO | | NULL | |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.001 sec)
Example records in table Devices:
01 Toshiba-1TB
02 Western-Digital-500GB
03 Seagate-4TB
04 Western-Digital-2TB
...
98 Zyxel-NAS
第二个table,Dirs_and_Files,包含以下字段:LNR是一个唯一的整数值,auto_incremented,字段D_Nr包含设备的编号路径和文件的存储位置。
此 D_Nr 值应与 table 设备中的 D_Nr 字段匹配。文件名字段包含存储文件的基本名称(文件名)。字段 Path_and_File 包含整个路径和文件名。
MariaDB [DevicesPool]> show columns from Dirs_and_Files;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| LNR | int(11) | NO | PRI | NULL | auto_increment |
| D_Nr | varchar(2) | NO | | NULL | |
| Filename | varchar(100) | NO | | NULL | |
| Path_and_File | varchar(250) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
4 rows in set (0.000 sec)
Example records for Dirs_and_Files:
01 01 King_Kong.mp4 /Medien/Filme/King_Kong.mp4
02 01 Airport.mp4 /Medien/Filme/Airport.mp4
03 02 Black_Panther.mp4 /Movies/Films/Black Panther.mp4
04 03 Shining.mp4 /Daten/Filme/Shining.mp4
05 03 King_Kong.mp4 /Daten/Filme/King_Kong.mp4
06 04 Alien.mp4 /Daten/Science/Alien.mp4
...
1412 98 Black_Panther.mp4 /home/user/Black_Panther.mp4
首先,我只想列出在 table Dirs_and_Names 中出现不止一次的所有文件(mp4 视频)。当我从 Dirs_and_Files 收到编号为 01、03、05 和 98 的记录时,这个主题就解决了。我已经有一个查询来执行此操作。
这是仅列出多个视频的查询命令:
SELECT d.Path_and_File, p.D_Name
FROM Dirs_and_Names d
LEFT JOIN DeviceNames p
ON d.D_Nr = p.D_Nr
INNER JOIN
(SELECT Filename
FROM Dirs_and_Names
WHERE Filename RLIKE "[.]mp4$"
GROUP by Filename
HAVING COUNT(Filename) > 1
) temp
ON d.Filename= temp.Filename
ORDER BY d.Filename;
现在我想列出存储在 table Dirs_and_Names 中的所有多个文件(mp4 视频),这些文件在特定设备编号 (D_Nr) 上具有兄弟文件。 在这种情况下,我想列出“Black_Panther.mp4”及其副本,它们也存储在设备号 98 和 02 上。
其他未存储在设备“98”上,因此应跳过。
如何在我的数据库中查询 table Dirs_and_Names 中的所有多个 mp4 视频文件(文件名),这些文件在特定设备编号 (D_Nr = 98) 上有同级文件?
感谢您的耐心等待,
-Linuxfluesterer
考虑在另一个 Dirs_and_Names
上添加 INNER JOIN
以在特定设备上过滤:
SELECT d.Path_and_File, p.D_Name
FROM Dirs_and_Names d
LEFT JOIN DeviceNames p
ON d.D_Nr = p.D_Nr
INNER JOIN
(SELECT Filename
FROM Dirs_and_Names
WHERE Filename RLIKE "[.]mp4$"
GROUP by Filename
HAVING COUNT(Filename) > 1
) agg
ON d.Filename= agg.Filename
INNER JOIN Dirs_and_Names d2
ON agg.Filename = d2.Filename
AND d2.D_Nr = 98
ORDER BY d.Filename;