Упорядочение запроса MySQL по наиболее распространенным словам в поле

StackOverflow https://stackoverflow.com/questions/839915

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top