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

时间:2019-07-20 00:07:29

标签: php mysql database rest web-services

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

我尝试添加一个限制,但可以输入相同的数据。

SELECT * FROM news ORDER BY RAND();

我想按部分来分类数据。

您能给我一个主意或方法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

一种解决方法是从第二个查询中排除当前加载的项目,例如:

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

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

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

这将确保不会加载任何重复项。

答案 1 :(得分:0)

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

  1. SELECT id FROM news;
  2. 每个用户
  3. $_SESSION['news_shuffle'] = array_shuffle($results_from_previous);随机播放一次 ,PHP在随机化事物方面比MySQL更好。
  4. $_SESSION['news_shuffle_offset'] = 0;,并在每次选择文章时将其递增。
  5. $stmt = $dbh->prepare('SELECT * FROM news WHERE id = ?');
  6. $stmt->execute([$_SESSION['news_shuffle'][$_SESSION['news_shuffle_offset']]);

这不是最优雅的解决方案,但是一旦用户/文章数量过多,它也不会翻倒服务器。