У меня есть конкатенация в MySQL для создания поля, по которому я могу искать. Он содержит имена животных, а также имена владельцев и адреса для клиентской базы данных. Мне нужно иметь возможность искать по имени животного, владельцу и почтовый индекс в любом порядке.
Таким образом, если меня зовут Джон Смит, и у меня есть собака по кличке Фидо, и я живу по почтовому индексу AB1 2CD, я хочу, чтобы поиск дал результаты, если введено любое из следующего:
"Джон Фидо AB1"
"Джон AB1"
"AB1 Джон"
"AB1 Фидо"
"Фидо 2CD"
"2CD"
"Fido"
и т. д., т. е. любое из полей в любом порядке, а также не полные слова, поэтому «john fido AB1» должен давать тот же результат, что и «jo fi AB1»
В настоящее время у меня есть этот код PHP, занимающий одно текстовое поле на моей странице поиска, взрывающийся и затем складывающий его для добавления% между поисковыми терминами:
$list = explode(' ',$_GET["q"]);
$q = implode('%%', $list);
if (!$q) return;
$sql = "SELECT DISTINCT owner.AddressPrim, owner.PostcodePrim,
owner.OwnerSurnamePrim,owner.OwnerForenamesPrim,owner.OwnerID
FROM owner
Inner Join patient ON owner.OwnerID = patient.OwnerID
WHERE CONCAT_WS(' ',owner.AddressPrim, owner.PostcodePrim,
owner.OwnerForenamesPrim,owner.OwnerSurnamePrim,patient.AnimalName) LIKE '%$q%'";
Это работает для "AB1 john" и "john fido", но не для "fido john", так как оно вышло из строя в объединенном поле.
Любая помощь с благодарностью