获得下一个结果

时间:2014-09-27 20:04:57

标签: php mysql sql sorting

我有一张类似下面的表。

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

如何在没有特异性的情况下获得57-58之后的5集,只有episode_number如episode_number> 57-58 LIMIT 5.

但很明显episode_number> 57-58不起作用,因为它包含字符串。数据库只会将其视为5并在episode_number 5之后返回接下来的5个结果。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

这应该为您提供此类查询的基本结构,您应该考虑将值转换为数字,以便能够轻松地比较它们。 如果可能的话,将表重组为具有分隔字段中的开始剧集和结束剧集的内容

相关问题