如何安排VARCHAR列?

时间:2013-08-08 10:34:01

标签: php mysql

我有包含varchar列的表。这个表将用于分页。 请参阅SQL Fiddle了解表结构。

http://sqlfiddle.com/#!2/db5467/53

当我触发查询

时,它包含列g_season
SELECT * FROM(SELECT * FROM Games WHERE g_season > 'cvxv' ORDER BY g_season ASC ) s LIMIT 1

它给了我正确的g_id=7但是当我输入'dasd'时它会给我g_id=10但它应该是g_id=12这是因为7和12 g_id列包含g_Season并且'dasd'和sql将获取最后一个匹配的行,它只是g_id=10

2 个答案:

答案 0 :(得分:1)

不应该像

 g_season = 'cvxv'

尝试将子查询作为

运行
SELECT * FROM Games WHERE g_season = 'dasd' ORDER BY g_season ASC 

它给出12和7 id,但是当8,10,1,2

中有> id时

,在这种情况下,它会返回id=12 - FIDDLE http://sqlfiddle.com/#!2/db5467/72;

编辑: 只有一件事出现在我的脑海里:

http://sqlfiddle.com/#!2/db5467/114

在那种情况下你可以通过ID进一步

答案 1 :(得分:1)

如果您需要g_id = 12

,这应该是您的查询
SELECT * FROM Games WHERE g_season = 'dasd' ORDER BY g_season ASC LIMIT 1

如果您有多个行具有相同的g_season,那么您确实需要第二个排序列,否则如果有多个匹配则您可能不确定返回的行。

编辑也许这就是你想要的

只要您知道如何订购匹配的记录,那么您就可以获得所需的内容,例如,这将获得第一条记录(假设我们按g_id ASC排序匹配的记录):

SELECT * 
  FROM Games
 WHERE g_season = 'dasd' 
 ORDER BY g_id ASC
 LIMIT 0,1

这将为您提供第二条记录:

SELECT * 
  FROM Games
 WHERE g_season = 'dasd' 
 ORDER BY g_id ASC
 LIMIT 1,2

你可以为每条记录保持这样的意图