2016-09-06 2 views
0

나는 다음과 같은 쿼리가 : 사용자가 쿼리를 얻을 수있는 마지막 줄에 같은 다른 라인을 입력 각각 별도의 검색어하나 개의 테이블이 비어있을 수있는 RLIKE와 두 테이블에서 검색하는 방법

SELECT p.partid, pp.partno, p.descr 
FROM part p, partcreditor pc, partcreditor_partno pp 
WHERE p.partid = pc.partid 
AND pc.creditorid = pp.creditorid 
AND p.partid = pp.partid 
AND (p.partid RLIKE '$val' OR pp.partno_search RLIKE '$val' OR p.descr RLIKE '$val') 

을 덧붙였다.

이 쿼리는 매우 빠르게 작동하지만 테이블 partcreditor에는 테이블 part에 대한 레코드가 없으므로 아무 것도 반환되지 않습니다. 그래서 left joins으로 쿼리를 재 작성하려고 시도했지만 쿼리가 매우 느려졌습니다.

모든 솔루션?

답변

0

주위를 둘러 볼 필요가없는 테마 ... 왼쪽으로 조인해야합니다.

그러나,과 같이, 조인 조건에 기준을 이동하려고 :

SELECT p.partid, pp.partno, p.descr 
FROM part p 
JOIN partcreditor pc ON p.partid = pc.partid 
LEFT JOIN partcreditor_partno pp ON p.partid = pp.partid 
    AND pc.creditorid = pp.creditorid 
    AND pp.partno_search RLIKE '$val' 
WHERE p.partid RLIKE '$val' 
OR p.descr RLIKE '$val' 

그것은 당신이 id 컬럼 상에 RLIKE을하고있는 것을 조금 이상한.

텍스트 검색을 수행 할 때 FULLTEXT 색인을 사용하면 놀랍게도 성능이 향상됩니다.

+0

감사합니다. 훨씬 빠릅니다. PHP에서 한 입력을 검색 조건으로 사용자 유형을 입력 할 수 있습니다.이 형식은 id 또는 descr 일 수 있으므로이 방법을 사용합니다. – Bart

+0

@bart 그러면 id에 rlike가 필요하지 않습니다. 'p.partid = '$ val'사용 OR p.descr RLIKE '$ val'' – Bohemian

+0

입력하자마자 자동으로 아약스로 검색을 시작합니다. 그래서'12 '입력은'123 ' – Bart

관련 문제