2017-12-11 5 views
0

다른 컬럼들 중에서 파일 이름에 확장자가있는 컬럼이있는 테이블이있다.다른 확장자를 가진 중복 파일 이름을위한 MySQL 검색

동일한 파일 이름이지만 다른 확장명을 사용하여 테이블에 삽입 된 모든 파일 이름을 찾아야합니다. 예를 들어

과 같은 파일을 찾고 있습니다.
01_ceremony_10021.flv 
01_ceremony_10021.mp4 

mp4 및 flv 형식으로 존재하는 파일 목록이 필요합니다.

내가 좋아하는 몇 가지를 시도했다 :

SELECT 
    archivo, 
    substr(archivo,1, locate(".flv", archivo)-1) as NomSinExt 
FROM videoscampus 
where (substr(archivo, -4) = '.flv' || substr(archivo, -4) = '.mp4') 
order by archivo asc 

하지만 그건 그냥 상관없이 나에게 동영상의 전체 목록을 제공합니다.

agai_cpal_t6_cristinacoca.mp4  
agai_cpal_t7_ent_ricardomartino_pacoarango.mp4 
agai_cpal_t8_alejandrogonzalez.mp4 
agai_cpal_t9_ent_ricardomartino_barbaradefranceschi.mp4 
AHE_INF_MMijanco_T3_Macronutrientes.flv <---- DUPLICATE I'm looking for 
AHE_INF_MMijanco_T3_Macronutrientes.mp4 <---- DUPLICATE I'm looking for 
ahe_inf_prim_t10_maitemijancos.mp4 
ahe_inf_t1_maitemijancos.mp4  
ahe_inf_t10_maitemijancos.mp4  
ahe_inf_t10.1_maitemijancos.mp4 
ahe_inf_t10.2_maitemijancos.mp4 
ahe_inf_t11_maitemijancos.mp4  
ahe_inf_t12_javiertejedor.mp4 

감사를 사전에 시간과 도움 : 나는 감지 할 필요가 파일 이름의 예는

Column  Type 
----------------------------- 
id   int(11) Auto Incr  
filename varchar(250)  
deleted  int(1) 
dateStart datetime  
dateEnd  datetime  

을 그리고 다음과 같이

테이블의 구조는 다음과 같다.

- 오라allo

+1

코드 **를 직접 작성해야합니다. [연구를 더 많이 마친 후] (https://meta.stackoverflow.com/q/261592/1011527) 문제가있는 경우 ** 시도한 것을 게시하십시오 ** 명확하지 않은 설명이있는 게시물 working ** 및 은 [Minimal, Complete, Verifiable example]을 제공합니다 (http://stackoverflow.com/help/mcve). [좋은 질문에 답변하는 방법] (http://stackoverflow.com/help/how-to-ask)을 읽어보십시오. [둘러보기] (http://stackoverflow.com/tour)와 [this] (https://meta.stackoverflow.com/q/347937/1011527)를 읽으십시오. –

+0

적어도 작동하지 않는 모든 쿼리를 표시하십시오. 테이블 스키마를 보여 주면 키 열 이름 등을 추측 할 필요가 없으므로 도움이됩니다. –

+0

죄송합니다. 저는 거의 아무 것도 게시하지 않았으므로 관례/예의에 익숙하지 않습니다. 나는 물론 자신을 알아 내려고 여기에 게시하기 전에 꽤 많은 인터넷 검색을 시도했다. 질문을 올리는 방법에 대한 팁을 고맙게 생각합니다. 감사! – orallo

답변

1

이 기능을 사용해보십시오. 테이블을 mp4 및 flv 행으로 분할 한 다음 각 파일 이름의 첫 번째 부분에서 일치하는 항목을 비교합니다.

SELECT 
    SUBSTR(a.`filename`,1,LOCATE('.flv')) as `base_name`, 
    a.`filename` as `flv_file`, 
    b.`filename` as `mp4_file` 
FROM `videoscampus` a 
JOIN `videoscampus` b 
ON b.`filename` LIKE '%.mp4' 
    AND SUBSTR(b.`filename`,1,LOCATE('.mp4')) = SUBSTR(a.`filename`,1,LOCATE('.flv')) 
WHERE a.`filename` LIKE '%.flv' 
    AND a.`deleted` = 0 
    AND b.`deleted` = 0 
+0

안녕 Sloan! 귀하의 답변에 감사 드리며 귀하의 솔루션은 거의 완벽했습니다. 쿼리는 LOCATE가 1 대신 2 개의 매개 변수를 사용하는 것에 대해 불평했습니다. 그래서 LOCATE에 대한 각 호출에서 파일 이름을 두 번째 매개 변수로 추가했습니다. 모든 것이 매력처럼 작동했습니다. 다시 한번 감사드립니다. – orallo

+0

다행이었고 오타를 유감스럽게 생각합니다! 건배! –

관련 문제