[英]Get next MYSQL Entry with stay my ordering
在CRM中,客户搜索数据并对其进行排序,并打开一个数据,例如ID为12的位置编号9上的数据,现在是客户,将保存并获取下一个条目,我将如何在这里获得我之后的第一个条目示例ID 6?
在过去,我提取了所有内容并进行了循环搜索我的条目并获取下一个条目,但我认为应该有一个更好的选择,我的方式有点糟糕。
谢谢
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
如果您知道找到的最后一行的位置是9,则选择中的order
和limit
的组合可以获取正确的数据...
SELECT *
FROM testdata
WHERE age > 18
ORDER BY age DESC
LIMIT 9,1
请注意,这实际上是在说-忽略前9行,而仅获取1行。
有关更多详细信息,请参见https://mariadb.com/kb/zh-CN/the-mariadb-library/select/#limit
我同意,提取一个完整的结果集并每次都遍历它们会很好用,但是有更优雅的方法可以解决这个问题。
这是我的建议。
选项1:使用布尔值字段来标记记录是否已被编辑。 在此示例中, edited
的字段的默认值为0(假)。 记录被编辑后,将已edited
标志更改为1(true)。
您的选择查询将如下所示:
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
,则只有记录)将是尚未编辑的下一个记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.