Упорядочение запроса MySQL по наиболее распространенным словам в поле
-
22-07-2019 - |
Вопрос
Меня всегда это интересовало, и теперь клиент задается вопросом, осуществимо ли это:
У меня есть список видов спорта, разбитый следующим образом:
- Мальчики, хоккей с шайбой
- Теннис для мальчиков
- Девушки Хоккей с шайбой
- Теннис для девочек
...и т. д
И они хотят, чтобы это сортировалось так:
- Мальчики, хоккей с шайбой
- Девушки Хоккей с шайбой
- Теннис для мальчиков
- Теннис для девочек
...и т. д
Мне просто интересно, возможно ли это, просто изменив запрос.К сожалению, я не могу сделать виды спорта гендерно-независимыми и выделить их пол в отдельную область.Я не могу существенно редактировать базу данных.Я решил, что лучший способ решить эту проблему — это запрос «наибольшее количество общих слов», но я понятия не имею, как это можно сделать.
Заранее спасибо за любую помощь, которую вы, ребята, можете предложить!
ОБНОВЛЯТЬ:В конечном итоге клиент отклонил запрос, однако я бы, скорее всего, воспринял его как принятый ответ.Это все еще не совсем удовлетворительный способ решения задач, но я не уверен, что в MySQL существует более «элегантное» решение.
Решение
Можете ли вы сделать что-то вроде
ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5)
в MySQL, если все виды спорта начинаются с мальчиков/девочек?
В качестве альтернативы, приведенное ниже может быть лучше, если в качестве разделителя используется пробел:
ORDER BY SUBSTRING(sport_name, LOCATE(sport_name, ' ')), SUBSTRING_INDEX(sport_name, ' ', 1)
Совершенно непроверено, поскольку я раньше этого не пробовал и у меня нет экземпляра MySQL для проверки.
Другие советы
«Большинство общих слов» означает сравнение общих слов в каждой строке со следующей строкой?В SQL это будет довольно сложно, потому что сложно получить запрос для сравнения разных строк друг с другом.
Вы можете упорядочить предписывающий оператор CASE, но это будет некрасиво:
... order by CASE sport_name WHEN 'Boys Ice Hockey' THEN 1 WHEN 'Girls Ice Hockey' THEN 2 WHEN 'Boys Tennis' THEN 3 WHEN 'Girls Tennis' THEN 4 -- etc END CASE