倒计时完成后,如何从 MySql 中 select 随机行?
How to select random row from MySql after countdown is done?
我这里有一个倒计时脚本
<h2 id="countdown"></h2>
<script>
var CountDownTimer;
CountDownTimer = function(dt, id) {
var _day, _hour, _minute, _second, end, selector, showRemaining, timer;
selector = document.getElementById(id);
end = new Date(dt);
_second = 1000;
_minute = _second * 60;
_hour = _minute * 60;
_day = _hour * 24;
showRemaining = function() {
var days, distance, hours, minutes, now, seconds;
now = new Date();
distance = end - now;
if (distance <= 0) {
CountDownTimer("09/27/2016 20:00", "countdown");
return;
}
days = Math.floor(distance / _day);
hours = Math.floor((distance % _day) / _hour);
minutes = Math.floor((distance % _hour) / _minute);
seconds = Math.floor((distance % _minute) / _second);
return selector.innerHTML = days + "days " + hours + "hrs " + minutes + "mins " + seconds + "secs";
};
return timer = setInterval(showRemaining, 1000);
};
CountDownTimer("09/27/2016 19:00", "countdown");
</script>
倒计时结束后,我希望查询 select 数据库中的随机行并重新开始倒计时到 +1 小时。 1 小时后,我希望这再次发生。
这是应该 select 随机行的代码,如果可能的话,这是我想在倒计时脚本中实现的代码。
<?php $sql = "SELECT * FROM users ORDER BY RAND() LIMIT 1"; $result1 = $conn->query($sql);?>
这是上次代码的结果代码
<?php
if ($result1->num_rows > 0) {
// output data of each row
while($row = $result1->fetch_assoc()) {
echo $row["username"];
}
} ?>
此代码现在有效,但问题是每次我刷新页面时,都会 select 编辑一个新的随机行。我想要的是每小时一个新的随机行 selected.
生成随机数时,使用两个变量存储在会话中,一个用于存储数字,另一个用于存储过期时间。
每当用户访问您的页面时,在后端将检查会话变量中是否设置了值,如果没有,则将保存新值,否则将获取数字并检查时间。如果时间到期,则应生成新值。
只需将所选用户的 ID 存储在一些额外的 table 中。
例如 user_of_hour(小时,user_id)。
并检查:
- 如果已经存储了一个小时的用户,则只需通过id获取即可
- 如果没有则进行随机选择
小建议:
不要使用 ORDER BY RAND() - 它在大数据集上非常慢。
我这里有一个倒计时脚本
<h2 id="countdown"></h2>
<script>
var CountDownTimer;
CountDownTimer = function(dt, id) {
var _day, _hour, _minute, _second, end, selector, showRemaining, timer;
selector = document.getElementById(id);
end = new Date(dt);
_second = 1000;
_minute = _second * 60;
_hour = _minute * 60;
_day = _hour * 24;
showRemaining = function() {
var days, distance, hours, minutes, now, seconds;
now = new Date();
distance = end - now;
if (distance <= 0) {
CountDownTimer("09/27/2016 20:00", "countdown");
return;
}
days = Math.floor(distance / _day);
hours = Math.floor((distance % _day) / _hour);
minutes = Math.floor((distance % _hour) / _minute);
seconds = Math.floor((distance % _minute) / _second);
return selector.innerHTML = days + "days " + hours + "hrs " + minutes + "mins " + seconds + "secs";
};
return timer = setInterval(showRemaining, 1000);
};
CountDownTimer("09/27/2016 19:00", "countdown");
</script>
倒计时结束后,我希望查询 select 数据库中的随机行并重新开始倒计时到 +1 小时。 1 小时后,我希望这再次发生。
这是应该 select 随机行的代码,如果可能的话,这是我想在倒计时脚本中实现的代码。
<?php $sql = "SELECT * FROM users ORDER BY RAND() LIMIT 1"; $result1 = $conn->query($sql);?>
这是上次代码的结果代码
<?php
if ($result1->num_rows > 0) {
// output data of each row
while($row = $result1->fetch_assoc()) {
echo $row["username"];
}
} ?>
此代码现在有效,但问题是每次我刷新页面时,都会 select 编辑一个新的随机行。我想要的是每小时一个新的随机行 selected.
生成随机数时,使用两个变量存储在会话中,一个用于存储数字,另一个用于存储过期时间。
每当用户访问您的页面时,在后端将检查会话变量中是否设置了值,如果没有,则将保存新值,否则将获取数字并检查时间。如果时间到期,则应生成新值。
只需将所选用户的 ID 存储在一些额外的 table 中。
例如 user_of_hour(小时,user_id)。
并检查:
- 如果已经存储了一个小时的用户,则只需通过id获取即可
- 如果没有则进行随机选择
小建议:
不要使用 ORDER BY RAND() - 它在大数据集上非常慢。