我正在为我的Android应用程序开发Web服务。我在MySQL表中有很多数据。我的服务使用RAND()函数随机获取此数据。我有很多记录。因此,我需要添加更多的负载功能。但是我的数据在不断变化。
我尝试添加一个限制,但可以输入相同的数据。
SELECT * FROM news ORDER BY RAND();
我想按部分来分类数据。
您能给我一个主意或方法吗?谢谢。
答案 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()
将这两个数据都分解为位。如果您不想完全了解我发送的链接的复杂性,则更简单的解决方案将是:
SELECT id FROM news;
$_SESSION['news_shuffle'] = array_shuffle($results_from_previous);
随机播放一次 ,PHP在随机化事物方面比MySQL更好。$_SESSION['news_shuffle_offset'] = 0;
,并在每次选择文章时将其递增。$stmt = $dbh->prepare('SELECT * FROM news WHERE id = ?');
$stmt->execute([$_SESSION['news_shuffle'][$_SESSION['news_shuffle_offset']]);
这不是最优雅的解决方案,但是一旦用户/文章数量过多,它也不会翻倒服务器。