У меня есть поиск, который ищет совпадение через несколько столбцов в нескольких таблицах. Проблема в том, что я использую «ИЛИ», но это не работает, если пользователь выполняет поиск по нескольким столбцам.MySQL ищет несколько столбцов для соответствия
Вот мой запрос:
SELECT clients.clientName,
projects.Client_ID,
projects.projectNumber,
projects.projectName,
projects.projectManager,
projects.expectedDate,
projects.address,
projects.CreationDate,
projects.custom1,
projects.custom2,
projects.custom3,
projects.custom4,
projects.custom5,
projects.custom6,
projects.custom7,
projects.custom8,
projects.custom9,
projects.Status_ID,
statuses.status
FROM projects
JOIN clients ON projects.Client_ID = clients.Client_ID
JOIN statuses ON projects.Status_ID = statuses.Status_ID
WHERE clientName LIKE '%$keyword%'
OR projectNumber LIKE '%$keyword%'
OR projectName LIKE '%$keyword%'
OR address LIKE '%$keyword%'
OR area LIKE '%$keyword%'
OR status LIKE '%$keyword%'
OR custom1 LIKE '%$keyword%'
OR custom2 LIKE '%$keyword%'
OR custom3 LIKE '%$keyword%'
OR custom4 LIKE '%$keyword%'
OR custom5 LIKE '%$keyword%'
OR custom6 LIKE '%$keyword%'
OR custom7 LIKE '%$keyword%'
OR custom8 LIKE '%$keyword%'
OR custom9 LIKE '%$keyword%';
Если же пользователь: статус и клиент --my запрос не возвращает никаких результатов.
Кроме того, меня беспокоит скорость этого запроса с большим количеством данных.
Вы просто должны переписать запрос, основанный на поиске, изменении или в и, и только включать поля, которые вы выполняете, не каждый раз каждый раз. –
Также при запросе нескольких таблиц не делайте предположения db использовать полное имя столбца в '' WHERE', например 'projects.custom9' – prodigitalson
Да, вы должны беспокоиться о скорости. База данных будет проверять каждую строку в базе данных каждый раз при поиске, потому что вы не можете использовать какие-либо индексы. –