Я мог бы использовать некоторую помощь, чтобы этот поиск возвращал результаты в определенных ситуациях. У пользователя есть 2 поля для заполнения, и я хотел бы оставить либо пустым, либо заполнить оба поля. Поля - это транспортное средство и ключевые слова. Поле транспортного средства предназначено для поиска по марке, модели, VIN, номеру грузовика (часто это 2–3 цифры или буквенный префикс, за которым следуют 2 цифры) и нескольким другим полям, которые принадлежат таблице грузовых автомобилей. Ключевые слова предназначены для поиска большинства полей в таблицах maintenance и maintenance_parts (например, описание работы, название детали, номер детали). Если оставить поле ключевых слов пустым, результаты не будут отображаться, даже если поле транспортного средства имеет собственные действительные результаты.
"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%')
AND MATCH( P.part_num, P.part_desc, P.part_ref) AGAINST( '$keywords' )
AND MATCH( M.comments, M.work_done) AGAINST( '$keywords' )
AND M.status = 'A' GROUP BY maintenance_id ORDER BY score DESC LIMIT 0, $limit";