把sql语句查询到的结果暂时保存

搜索关键字,并把搜索到的结果分页 , 怎么做不会出现问题 ?
我用的sql语句是这样的,$sql = "SELECT FROM ( SELECT FROM {$my_mysql_dbname}.{$table} WHERE title like '%{$search_text}%' ) AS result ORDER BY id DESC LIMIT ".( ($page_now-1)*$page_size ).",".$page_size ;

因为每次都要重新查询整个数据表,当表中数据个数突然变化的时候,分页就会出错(重复出现或者其他问题) ,我想的是只有第一次查询需要查询整个表,以后就不再进行查询,直接从第一次查询的结果中选取 , 不知道这样应该这么做 ? 或者是用别的方法 ,求教 , 谢谢大家了

阅读 6.5k
7 个回答

这个问题在web 端不是很明显,在app 开发中就很容易发现了,有时候还会被误认为是bug 呢。
目前我采用的机制是,客户端(网页js 端)每次请求得时候带着我上一页的最后一个id ,然后我根据此id 推出接下来的分页数据。

Sql 语句类似如下:
Select column from table where id < $max_id

这样的话新产生的数据就不会被列入当前被查询的数据集中了,因为当前新数据的id 肯定大于max_id 的。

1、前面几位提到的将结果存储到如redis,memcahe等,下次再查询的时候先看cache里面是否有,有则使用之,无查询并缓存之。
2、使用Mysql创建临时表CREATE TEMPORARY TABLE temp .....

  1. 第一次查询,数据发生变化,第二次查询,结果和前一次不一样不能叫做“出错”,这个恰恰是正确的行为

  2. 其他几位的解决方案能够满足你的要求

新手上路,请多包涵

不能把这个结果保存起来当做一张表吗?

使用 memcache 加缓存可以解决你想要的暂时保存哈

新手上路,请多包涵

如果要直接从第一次查询结果中选取,可以选择把第一次查询的数据以JSON格式(或别的格式)保存到文本文件中,“非第一次查询”情况下的数据调用就直接读取该文本文件做相应的数据处理,等到下一次的“第一次查询”再从数据表中读取文件,并将读取到到数据更新到这一文本文件中。

个人想法,不知道是否符合题主要求。

很简单啊,所有数据一次输出到前端,让前端去分页,每次下一页都由前端去处理,除非刷新页面,否则不再请求后端

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题