我有包含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
答案 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
你可以为每条记录保持这样的意图