Порядок запроса MySQL по наиболее распространенным словам в поле - PullRequest
2 голосов
/ 08 мая 2009

Я всегда задавался вопросом об этом, и теперь клиент задается вопросом, возможно ли это:

У меня есть список видов спорта, разбитый примерно так:

  • Мальчики Хоккей
  • Boys Tennis
  • Девушки Хоккей
  • Девушки Теннис

... и т. Д.

И они хотят, чтобы это сортировалось как:

  • Хоккей с шайбой
  • Девушки Хоккей
  • Boys Tennis
  • Теннис для девочек

... и т.д.

Мне просто интересно, возможно ли это, просто изменив запрос. К сожалению, я не могу установить, чтобы спорт был гендерно-специфичным, а его пол - отдельным полем. Я не могу редактировать базу данных каким-либо существенным образом. Я подумал, что лучший способ решить проблему - это запрос «большинство слов в общем», но я понятия не имею, как это можно сделать.

Заранее благодарим за любую помощь, которую вы, ребята, можете предложить!

ОБНОВЛЕНИЕ: клиент закончил тем, что отбросил запрос, однако я бы подошел к нему скорее всего как принятый ответ. Все еще не вполне удовлетворительный способ ведения дел, но я не уверен, что в MySQL есть более «изящное» решение.

Ответы [ 2 ]

3 голосов
/ 08 мая 2009

«Большинство общих слов», как сравнивать общие слова в каждой строке со следующей строкой? Это будет довольно сложно в 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
2 голосов
/ 08 мая 2009

Можете ли вы сделать что-то вроде

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 для тестирования на

...