获取下一个MYSQL条目,将我的订单

问题描述:

保留在CRM客户数据搜索和排序中,并打开一个数据,如位置编号为9的数据,ID为12,现在是客户,将保存并获取下一个条目,我会在这里用我的例子id 6来获得第一个入口。获取下一个MYSQL条目,将我的订单

在过去我提取所有,并做了一个循环搜索我的条目,并获得下一个,但我认为theres应该是一个更好的选择,我的方式是一种糟糕的表现。

感谢

SELECT * FROM testdata WHERE age > 18 ORDER BY age DESC 
Example of DB 
    |id|Name  |age| 
    |9 |perso1 |66 | 
    |10|rergfdgd |55 | 
    |11|gthfghfh |44 | 
    |9 |hghghgh |33 | 
    |1 |kgthht |22 | 
    |2 |ghjgj  |21 | 
    |3 |fhgjg  |20 | 
    |4 |hjhjhjh |19 | 
    |12|ghgjgjg |18 | 
    |6 |tgjhgf |17 | 
    |7 |jhmgmhg |16 | 
    |8 |fghgjgjg |15 | 

如果你想查询的顺序取出,光标将是正确的解决方案:https://dev.mysql.com/doc/refman/5.7/en/cursors.html

+0

请注意,光标仅在“存储例程”中起作用。 –

如果你知道,你发现最后一排的位置是9,第a order,并在选择可以读取正确的数据limit组合...

SELECT * 
    FROM testdata 
    WHERE age > 18 
    ORDER BY age DESC 
    LIMIT 9,1 

注意,这有效说 - 忽略前9行并取1行。

更多细节

+0

似乎很有趣,因为问题是数据可能更少或更多,它是一个crm,所以人们可以在其上工作,但是如果没有其他公司案例的其他解决方案,我必须循环才能减少数据2个人在同一个竞选活动 – StefanBD

+0

也许我应该玩商店下一个和prev entrys直接在我的反应状态,当我打开数据,所以它易于转到下一个 – StefanBD

+0

困难的是,如果别人已经在下一个项目工作。听起来就像你需要一个队列,你只是不停地获取下一个条目。新条目被添加到队列的末尾。 –

我同意见https://mariadb.com/kb/en/the-mariadb-library/select/#limit,拉一个完整的结果集,并通过他们循环每次会工作得很好,但也有更优雅的方式来处理这个问题。

这是我的建议。

选项1: 使用布尔字段标记是否已经编辑了记录。在本例中,edited字段的默认值为0(false)。编辑完记录后,将edited标志更改为1(真)。然后

你的选择查询应该是这样的:

SELECT * FROM testdata WHERE age > 18 and edited = 0 ORDER BY age DESC limit 1 

然后,在你的PHP代码,就没有必要遍历结果,第一个记录(且仅记录如果包括LIMIT 1)在您的查询中将是下一个尚未编辑的记录。

选项2:添加一个date_modified字段,其​​默认值为NULL。编辑记录时,请将now()保存在date_modified字段中。然后,您的查询是:

SELECT * FROM testdata WHERE age > 18 and date_modified IS NOT NULL ORDER BY age DESC limit 1 

就像在第一个选项,也没有必要遍历结果,第一个记录(也是唯一的记录,如果包括LIMIT 1)在您的查询将是下一个尚未编辑的记录。

+0

好主意,但不工作,因为我有更多的用户 – StefanBD

+0

你的意思是你有多个用户一次访问系统?如果是这种情况,那么这种方法仍然有效。相反,当每个用户检索记录时,在投放到屏幕之前将该记录标记为“检索”。这将防止下一个用户获得相同的记录。此外,我会将查询包装在''中,以防止两个用户同时获得相同的记录 –