лучше сделать так:1) в функции getProducts();
if (!empty($data['filter_name'])) {
$implode = array();
$words = explode(' ', $data['filter_name']);
$words = array_filter(array_unique($words), 'strlen');
foreach ($words as $word) {
if (!empty($data['filter_description'])) {
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
} else {
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
}
}
if ($implode) {
$sql .= " " . implode(" OR ", $implode) . "";
}
}
заменить
if ($implode) {
$sql .= " " . implode(" OR ", $implode) . "";
}
на
if ($implode) {
$sql .= " " . implode(" AND ", $implode) . "";
}
2)И в функции getTotalProducts();
if (!empty($data['filter_name'])) {
$implode = array();
$words = explode(' ', $data['filter_name']);
foreach ($words as $word) {
if (!empty($data['filter_description'])) {
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
} else {
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
}
}
if ($implode) {
$sql .= " " . implode(" OR ", $implode) . "";
}
}
заменить
if ($implode) {
$sql .= " " . implode(" OR ", $implode) . "";
}
на
if ($implode) {
$sql .= " " . implode(" AND ", $implode) . "";
}
В итоге будет искать по 100% совпадению + воспринимает любой порядок слов .
что бы найти "Велосипед Stels 410" можно вводить "410 Stels" , " велосипед 410" и.т.д.