#mysql #database
#mysql #База данных
Вопрос:
Я хочу запустить ПОЛНОТЕКСТОВЫЙ поиск и возвращать только результаты с отличным (уникальным) product_name, но DISTINCT(product_name)
, похоже, это не применяется. Любая помощь или указания в правильном направлении будут с благодарностью приняты.
ЗАПРОС MySQL:
SELECT DISTINCT(product_name), sku
FROM products
WHERE MATCH(product_name)
AGAINST('Flixonase' IN NATURAL LANGUAGE MODE)
LIMIT 5
Текущий результат:
product_name sku
FLIXONASE NASAL 24 HR SPRAY 60D 9300673808851
FLIXONASE NASAL 24 HR SPRAY 120D 9400600822438
FLIXONASE NASAL 24 HR SPRAY 60D 930067308851
FLIXONASE NASAL 24 HR SPRAY 60D 9300673831972
FLIXONASE NASAL 24 HR SPRAY 120D 9300673832146
Примечание: строки 1, 3 и 4 имеют повторяющиеся product_names . Это то, что я пытаюсь устранить.
Результат, который я хочу
product_name sku
FLIXONASE NASAL 24 HR SPRAY 60D 9300673808851
FLIXONASE NASAL 24 HR SPRAY 80D 9400600822438
FLIXONASE NASAL 24 HR SPRAY 100D 930067308851
FLIXONASE NASAL 24 HR SPRAY 120D 9300673831972
FLIXONASE NASAL 24 HR SPRAY 140D 9300673832146
Ответ №1:
Здесь та же проблема. Теперь это решается с GROUP BY
помощью .
Мой код:
SELECT *
FROM products
WHERE MATCH(description)
AGAINST('my product description' IN NATURAL LANGUAGE MODE)
GROUP BY product_name
LIMIT 10
спасибо @Barmar
Ответ №2:
DISTINCT
не применяется к одному столбцу, оно относится ко всей строке. Если вы хотите получить одну строку для определенного столбца, используйте GROUP BY
.
SELECT product_name, sku
FROM products
WHERE MATCH(product_name)
AGAINST('Flixonase 24hr Allergy Relief Nasal Spray 60 Doses' IN NATURAL LANGUAGE MODE)
GROUP BY product_name
ORDER BY MATCH(product_name)
AGAINST('Flixonase 24hr Allergy Relief Nasal Spray 60 Doses' IN NATURAL LANGUAGE MODE) DESC
LIMIT 5
Комментарии:
1. Хм, добавление
GROUP BY product_name
now больше не дает мне пять лучших совпадений, а пять результатовproduct_name
, отсортированных по возрастанию?2. У вас нет
ORDER BY
в запросе, почему вы ожидаете, что результат будет в каком-то определенном порядке?3. Я добавил
ORDER BY
, чтобы упорядочить их по тому, насколько хорошо совпадение.