특정 장치에 있는 레코드에 따라 비디오 레코드의 모든 형제를 쿼리합니다.
여러 스토리지 장치의 디렉터리와 파일 이름을 MariaDB 데이터베이스에 저장했습니다.여기에는 DeviceNames와 Dirs_and_Files라는 두 개의 테이블이 있습니다.테이블 장치 이름에는 두 개의 필드가 있습니다.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은 고유한 정수 값인 auto_incremented이며, D_Nr 필드에는 경로와 파일이 저장된 장치의 번호가 포함되어 있습니다.
이 D_Nr은 테이블 장치의 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 비디오)만 나열하고 싶었습니다.이 주제는 01, 03, 05, 98이라는 숫자를 가진 Dirs_and_Files로부터 레코드를 받을 때 해결됩니다.이미 문의 사항이 있습니다.
다음은 이러한 여러 비디오만 나열하는 쿼리 명령입니다.
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"에 저장되지 않으므로 생략해야 합니다.
특정 장치 번호(D_Nr = 98)에 형제가 있는 Dirs_and_Names 테이블의 모든 다중 mp4 비디오 파일(파일 이름)에 대해 데이터베이스를 쿼리하려면 어떻게 해야 합니까?
기다려 주셔서 감사합니다.
- Linux 플러스터
추가를 고려해 보십시오.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;
언급URL : https://stackoverflow.com/questions/64187357/query-all-siblings-of-video-records-according-to-those-on-a-specific-device
'sourcetip' 카테고리의 다른 글
리눅스 티는 파이썬과 함께 작동하지 않습니까? (0) | 2023.07.22 |
---|---|
C의 함수에서 재할당을 사용하는 방법 (0) | 2023.07.22 |
json 배열에서 mariadb의 JSON 함수를 사용하여 레코드를 검색하는 방법 (0) | 2023.07.22 |
오라클 실행 계획 (0) | 2023.07.22 |
TYPO38.7.13 - MariaDB 쿼리 작성기 전체 텍스트 (0) | 2023.07.22 |