2014-09-27 3 views
-1

У меня есть таблица, которая похожа на приведенную ниже.Получение следующих результатов

id | episode_number 

1  55 
2  56 
3  57-58 
4  59 
5  60 
6  61-62 
7  63 
8  64 
9  65-66 
10  67-68 

Как бы я получить следующие 5 эпизодов после 57-58 без специфичностью идентификатор, только EPISODE_NUMBER, такие как EPISODE_NUMBER> 57-58 LIMIT 5.

Но, очевидно, EPISODE_NUMBER> 57-58 не будет потому что в нем содержится строка. База данных будет просто рассматривать его как 5 и возвращать следующие 5 результаты после EPISODE_NUMBER 5.

ответ

1

Использование CAST function для преобразования строки в числа, тогда ваш запрос:

SELECT episode_number 
    FROM table_name 
    WHERE CAST(episode_number AS UNSIGNED) > CAST('57-58' AS UNSIGNED) 
    ORDER BY CAST(episode_number AS UNSIGNED) 
    LIMIT 5 

Если есть два номера, например: '57 -58' , а затем CAST('57-58' AS UNSIGNED) новообращенных и возвращает первый один: 57

+0

Да, это решило проблему! Благодаря! –

+0

MySQL позволяет следующую сокращенную версию: episode_number + 0 – Strawberry

1

Попробуйте

SELECT TOP 5 * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58") 

или, если это MySQL

SELECT * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58") LIMIT 5 
+0

TOP не существует в MySQL, вы должны использовать LIMIT, также заказ отсутствуют – radar

+0

Смотрите мой редактировать @Rajesh –

+0

Что я скажем про идентификатор? Посмотрите на вопрос выше. Я сказал: «... без специфики id.» –

0

Вы можете выбрать, как это:

select id , case when LOCATE('-' , episode_number) = 0 then episode_number 
       else LEFT(episode_number , LOCATE('-' , episode_number)) end 
      as start_episode , 
      case when LOCATE('-' , episode_number) = 0 then episode_number 
       else RIGHT(episode_number , LEN(episode_number) -LOCATE('-' , episode_number)) end 
      as end_episode 

это должно дать вам базовую структуру для таких запросов, вы должны рассмотреть вопрос о преобразовании значения в чтобы их можно было легко сравнивать. возможности реструктурировать таблицу к чему-то, что есть стартовый эпизод и конец эпизод в разнесенных полях

+0

Слишком много вещей, это замедлит запрос. –

+0

Сохранение данных, подобных этому, как текст в базе данных, утрачивает смысл данных. это показывает, как создать лучшую структуру, которая правильно моделирует домен вопроса – gabber

+0

говорит, что парень с 38 очками –

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