2009-05-08 1 views
2

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

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

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

... и т.д.

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

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

... и т.д.

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

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

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

ответ

2

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

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 экземпляр, чтобы проверить его против

+0

Обновлено по мере того, как я перепутал параметры длины и начальной позиции на SUBSTRING и позиции начинаются с 1. Я считаю, – Trotts

+0

Это не решит проблему * в общем *, не так ли?:) – Tomalak

+0

Да, как я уже сказал, я не тестировал его и не смог атаковать, я поставил там второй вариант, который может быть немного более надежным, если он будет работать :) – Trotts

3

«Большинство слов в общем», как в сравнении общих слов в каждой строке со следующей строкой? Это будет довольно сложно в SQL, потому что трудно получить запрос для сравнения разных строк друг с другом.

Вы можете заказать по предписывающему заявлению СЛУЧАЯ, но оно не будет достаточно:

 
... 
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 
+0

+1 для прагматичный подход. Это может быть единственный способ сделать это, с предсказуемым результатом и в ограниченное время. – Tomalak

Смежные вопросы