sourcetip

특정 장치에 있는 레코드에 따라 비디오 레코드의 모든 형제를 쿼리합니다.

fileupload 2023. 7. 22. 10:21
반응형

특정 장치에 있는 레코드에 따라 비디오 레코드의 모든 형제를 쿼리합니다.

여러 스토리지 장치의 디렉터리와 파일 이름을 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

반응형