검색하는 데 문제가 있습니다. 현재이 작업은 maintenance_parts 테이블에 최소 1 행 이상의 결과 만 반환합니다. 0 부분 행이 있더라도 결과를 반환하고 싶습니다.결과에 여러 가지 문제가 발생하지 않도록이 SQL을 향상시킬 수 있습니까?
두 번째 문제점은 차량을 검색 할 때 여러 개의 결과 (여러 유지 관리 행)가 반환되어야하는 경우에만 해당 차량에 대해 1 개의 결과 만 반환한다는 것입니다.
일부 배경 정보 : 사용자는 2 개의 입력란을 채 웁니다. 필드는 차량 및 키워드입니다. 차량 필드는 제조사, 모델, VIN, 트럭 번호 (종종 2 ~ 3 자리 또는 2 자리 숫자 뒤에 오는 접두어) 및 트럭 테이블에 속하는 다른 몇 가지 필드를 기반으로 검색 할 수 있도록합니다. 키워드는 maintenance 및 maintenance_parts 테이블 (작업 설명, 부품 이름, 부품 번호 등)의 대부분의 필드를 검색합니다.
maintenance_parts 테이블은 각 유지 관리 행에 대해 0, 1 또는 그 이상의 행을 포함 할 수 있습니다. 트럭 테이블에는 모든 유지 보수 행마다 정확하게 1 개의 행이 있습니다. 트럭에는 여러 유지 관리 기록이있을 수 있습니다.
"SELECT M.maintenance_id, M.some_id, M.type_code, M.service_date, M.mileage, M.mg_id, M.mg_type, M.comments, M.work_done,
MATCH(M.comments, M.work_done) AGAINST('$keywords') +
MATCH(P.part_num, P.part_desc, P.part_ref) AGAINST('$keywords') +
MATCH(T.truck_number, T.make, T.model, T.engine, T.vin_number, T.transmission_number, T.comments) AGAINST('$vehicle')
AS score
FROM maintenance M, maintenance_parts P, truck T
WHERE M.maintenance_id = P.maintenance_id
AND M.some_id = T.truck_id
AND M.type_code = 'truck'
AND (
(MATCH(T.truck_number, T.make, T.model, T.engine, T.vin_number, T.transmission_number, T.comments) AGAINST('$vehicle')
OR T.truck_number LIKE '%$vehicle%')
OR MATCH(P.part_num, P.part_desc, P.part_ref) AGAINST('$keywords')
OR MATCH(M.comments, M.work_done) AGAINST('$keywords')
)
AND M.status = 'A' GROUP BY maintenance_id ORDER BY score DESC, maintenance_id DESC LIMIT 0, $limit"
가능한 중복 아래 해결해야한다 : //stackoverflow.com/questions/4576473/what-can-i-do-to-make-this-sql-return-results-in-certain-situations) –