0

我有一个包含 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和12g_id列包含g_Season和'dasd'并且sql将获取最后匹配的行而且它只是g_id=10

4

2 回答 2

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 走得更远

于 2013-08-08T10:41:33.007 回答
1

如果您愿意,这应该是您的查询g_id = 12

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

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

编辑也许这就是你想要的

只要您知道要如何对匹配的记录进行排序,那么您就可以获得所需的内容,例如这将为您提供第一条记录(假设我们通过g_idASC 对匹配的记录进行排序):

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

你可以为每条记录保持这样的增量

于 2013-08-08T10:48:55.333 回答