Доброе время суток, задача следующее есть категория, название (name) Iphone у нее есть альтернативное название (alternative_name) Айфон
При ajax поиске использую вот такой вот запрос
public function getCategories($data=array()) {
if (!empty($data)) {
$sql = "SELECT c.category_id, cd.name, cd.alternative_name FROM " . DB_PREFIX . "category c
LEFT JOIN category_description cd ON (c.category_id = cd.category_id)
WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "'
if (!empty($data['filter_name'])) {
$sql .= " AND (
cd.alternative_name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
$sql .= ")";
$sql .= " OR (
cd.name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
$sql .= ")";
}
$sql .= "
GROUP BY c.category_id
ORDER BY LCASE(cd.name) ASC";
if (!empty($data['limit'])) {
$sql .= " LIMIT " . (int)$data['limit'];
}
$query = $this->db->query($sql);
$results = $query->rows;
} else {
$results = array();
}
return $results;
}
Все вроде хорошо работает, ищет по слову Iphone и Айфон, но требуется помимо того, что искать по двум словам так и еще выводить в результатах поиска либо альтернативное название категории (alternative_name) либо обычное (name)
и вот тут заминка так как выборка с бд дает нам 2 названия и как определить какое из них нужно выводить (Какое из них вводил человек в поиске)
Вывод происходит следующим образом
$results = $this->model_common_search->getCategories($filter_data);
foreach ($results as $result) {
$name = strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8'));
$keys = implode('|', explode(' ', $keyword));
$name_hl = preg_replace('/(' . $keys .')/iu', '<span class="h6">\0</span>', $name);
$data['category']['categories'][] = array(
'name' => $name,
'name_hl' => $name_hl,
'href' => $this->url->link('catalog/product','product_id=' . $result['product_id']),
);
}