获取下一个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 |
如果你知道,你发现最后一排的位置是9,第a order
,并在选择可以读取正确的数据limit
组合...
SELECT *
FROM testdata
WHERE age > 18
ORDER BY age DESC
LIMIT 9,1
注意,这有效说 - 忽略前9行并取1行。
更多细节
我同意见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
)在您的查询将是下一个尚未编辑的记录。
好主意,但不工作,因为我有更多的用户 – StefanBD
你的意思是你有多个用户一次访问系统?如果是这种情况,那么这种方法仍然有效。相反,当每个用户检索记录时,在投放到屏幕之前将该记录标记为“检索”。这将防止下一个用户获得相同的记录。此外,我会将查询包装在'
请注意,光标仅在“存储例程”中起作用。 –