如何解决根据特定设备上的视频记录来查询所有视频记录的同级
我已经从MariaDB数据库中的几个存储设备中存储了我(几乎完整的)目录和文件名。这里有两个表,DeviceNames和Dirs_and_Files。表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
第二个表Dirs_and_Files包含以下字段:LNR是一个唯一整数值,自动递增,字段D_Nr包含存储路径和文件的设备的编号。
此D_Nr是一个值,应与表Devices中的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
首先,我只想列出在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;
现在,我要列出所有存储在表Dirs_and_Names中的特定设备编号(D_Nr)上具有同级的多个文件(mp4视频)。 在这种情况下,我想列出“ Black_Panther.mp4”及其副本,它们也存储在设备号98和02中。
其他未存储在设备“ 98”上,因此应将其跳过。
如何查询Dirs_and_Names表中所有具有特定设备编号(D_Nr = 98)的同级文件的所有多个mp4视频文件(文件名)?
感谢您的耐心等候,
-Linuxfluesterer
解决方法
考虑在另一个INNER JOIN
上添加一个Dirs_and_Names
以在特定设备上进行过滤:
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。