从 MySQL 中随机生成的数据加载更多功能



我正在为我的Android应用程序开发Web服务。我在 MySQL 表中有很多数据。我的服务使用 RAND(( 函数随机获取此数据。我得到很多记录。因此,我需要添加加载更多功能。但我的数据在不断变化。

我尝试添加限制,但相同的数据可能会出现。

SELECT * FROM news ORDER BY RAND();

我想以分段方式提供数据。

你能给我一个想法或方法吗?谢谢。

处理此问题的一种方法是从第二个查询中排除当前加载的项目,例如:

SELECT * FROM news ORDER BY RAND() LIMIT 10;

然后,在进行第二次查询时,可以排除已加载的项目:

SELECT * FROM news WHERE `id` NOT IN(<loaded ids>) ORDER BY RAND() LIMIT 10;

这将确保没有加载重复项。

MySQL旨在提供由索引优化的有序数据,ORDER BY RAND()将两者分解为位。如果您不想完全了解我发送的链接的复杂性,更简单的解决方案是:

  1. SELECT id FROM news;
  2. $_SESSION['news_shuffle'] = array_shuffle($results_from_previous);每个用户都会发生一次洗牌,PHP比MySQL更擅长随机化。
  3. 每次选择文章时$_SESSION['news_shuffle_offset'] = 0;并递增它。
  4. $stmt = $dbh->prepare('SELECT * FROM news WHERE id = ?');
  5. $stmt->execute([$_SESSION['news_shuffle'][$_SESSION['news_shuffle_offset']]);

这不是最优雅的解决方案,但是一旦您有超过几个用户/文章,它也不会翻倒您的服务器。

相关内容

  • 没有找到相关文章

最新更新