繁体   English   中英

继续下订单,获取下一个MYSQL条目

[英]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,则选择中的orderlimit的组合可以获取正确的数据...

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM