2
У меня есть следующий метод, чтобы создать поисковый запрос оценки термин поиска вхождением:объединить два MySQL Поисковые запросы
public function findAll($search, array $data = []) {
$query = DB::query("
SELECT
SQL_CALC_FOUND_ROWS
*,
SUM(MATCH(text) AGAINST('{$search}' IN BOOLEAN MODE)) as score
FROM " . DB::prefix() . "search_index
WHERE MATCH(text) AGAINST('{$search}' IN BOOLEAN MODE)
OR text LIKE '%{$search}%'
GROUP BY language_id, type, object_id
ORDER BY score DESC
LIMIT " . (int)$data['start'] . ", " . (int)$data['limit'] . "
");
$count = DB::query("SELECT FOUND_ROWS() AS total");
return [
'count' => (int)$count->row['total'],
'query' => $query->rows
];
}
Это прекрасно работает, но мне нужно добавить в запрос к tag
таблице так что это увеличит счет и добавлять элементы в массив для содержания, которое не может уже существовать в основном запросе:
$tags = DB::query("
SELECT * FROM " . DB::prefix() . "tag
WHERE tag = '{$search}'
");
Любые идеи о том, как реализовать это в основном запросе, так что я только исполняющих единственный запрос?
Вы хотите, чтобы получить все столбцы из 'tag' таблицы или только один? Если вы хотите получить один столбец, вы можете попытаться присоединиться к 'search_index' с помощью' tag', используя значение '$ search' как условие соединения:' search_index join tag на tag.tag = '$ search''. Тогда, возможно, можно использовать функцию GROUP_CONCAT для получения нужного вам значения в виде списка. Попробуйте это и сообщите мне, если это сработает. –
Да Мне нужно получить все столбцы из 'tag', поскольку мне нужно сопоставить другие столбцы, чтобы я не дублировал результаты. Основной запрос заключается в полнотекстовом поиске содержимого и заголовка данной статьи, продукта, страницы и т. Д. Но у пользователя есть возможность добавить тег, который может или не может быть включен в заголовок или содержимое. Таким образом, у них может быть статья об Apple, но они добавляют тег 'imac', даже если это не в статье, его все равно нужно найти и указать на данную статью Apple. –
Я не уверен, что вы можете получить все в рамках одного запроса. Во всяком случае, мне кажется, что результаты не полностью связаны. Возможно, получить их только в одном запросе может быть более сложным и по-прежнему иметь низкую производительность. Если у вас нет проблем с временем выполнения, я рекомендую вам придерживаться двух разделенных запросов. –