2011-09-20 41 views
1

很抱歉,如果这个问题很混乱。MYSQL LIMIT。是否可以跳过某些行?

我继承了一个已经建立了一个网站,所以我真的不能做任何事情过于激烈。

某个页面上的MySQL查询使用限制为仅显示这样的相关条目:

comtitlesub.idcts = %s LIMIT 1,3 

跳过第一个记录并显示以下三个记录。 我一直要求增加一个新的纪录,这是很好的,但是这是创纪录的7号记录5和6是不应该显示此页面,以便更改查询到:

comtitlesub.idcts = %s LIMIT 1,6 

显示所有6记录如你所料。

一个令人困惑的事情是,我已经改变了ID的每一个的记录,以便我的新的ID 4,并且然而,这并不有所作为。

是否有“跳过”不需要的记录,还是我从错误的方向接近这一个简单的方法?

+2

你不能进一步限制你的结果在'WHERE'子句吗?:'WHERE comtitlesub.idcts =%s AND someothercol NOT IN(3,4,6,1)' –

+0

当然,你会想要使用在'WHERE'中具有稳定数据并且不依赖于可能改变的数字ID的列。 –

+0

@michael谢谢你,我会给出这个报告并回报 – Andrew

回答

2

添加“order by comtitlesub.idcts”在你查询终端,但限制条款之前。

... comtitlesub.idcts = %s ORDER BY comtitlesub.idcts LIMIT 1,6 

基本上,改变id不重新排序,行存储,以便他们已经创建,检索默认的方式。

+0

这给了我相同的结果。但是由于某种原因我没有考虑使用Order By,所以我要试验。噢,谢谢你解释为什么改变ID不起作用:) – Andrew

+0

当我使用ORDER BY areas.id(该查询使用了两个表)时,这个修正了它。我很想放松限制来做一些它不打算做的事情,我甚至没有考虑这样做。谢谢 – Andrew

+0

正如@Michael所说的那样,做一些像'where id in(2,3,4,5,6)'或'(2至6)之间的id(现在已经重做了ID)真的会让我们全部睡得好;) – roselan

1

安德鲁,LIMIT将按照特定的顺序划定,在你的情况下,不约而同的默认顺序比ID顺序相同的,现在你已经改变了它,你将需要通过ID订购:

ORDER BY comtitlesub.idcts 
+0

感谢您的答案。不敢相信我甚至没有想过使用Order By! – Andrew

1

我认为最简单的办法是修改WHERE子句排除您要排除的行。例如:

WHERE comtitlesub.idcts = %s AND someothercol NOT IN ('cat','frog','kazoo') 

理想的可维护性,你想someothercol保持稳定的数据,而不是这可能会为你的应用程序数据的变化而变化一个数字ID。

+0

非常感谢您的时间。 ORDER BY示例为我提供了我需要的“快速修复”。 – Andrew