我正在尝试链接数据库中的2行,以便PHP代码从一行中随机选择一个值,并将其链接到第二行。例如:
<?php
date_default_timezone_set("Asia/Tel_Aviv");
$mysqli = new mysqli;
$mysqli->connect("localhost", "root", "", "root");
$giftsq = $mysqli->query("SELECT * FROM `gifts`");
while($gifts = $giftsq->fetch_array())
{
$date = date('H:i');
if ($gifts['time'] <= $date)
{
$giftsid = $gifts['id'];
// $mysqli->query("DELETE FROM `gifts` WHERE `id` = '".$giftsid."'");
$winner = $mysqli->query("SELECT * FROM `giveaways` WHERE `giftid` = '".$giftsid."' ORDER BY RAND() LIMIT 1") or die('Error:'.$mysqli->error);
if($winner->num_rows >= 1)
{
$newwinner = $winner->fetch_array;
echo $newwinner['userid'];
}
}
}
?>
您可以看到它选择了所有礼物ID,其日期小于当前日期或等于它。
选择正确的giftID后,系统要通过在名为giveaways
的第二行选择相同的giftid来随机选择获胜者。
但由于某种原因,它不起作用..
以下是数据库的抽象:
时间是代表送礼赠品的结束时间。
id ------ title ------ img ------ creator ------ members ------ points ------ time
3 dota 1.png Captain 250 30000 14:00
6 gta 2.png User 303 20000 24:00
7 flolo 3.png Captain 204 10000 22:30
id ------ giftid ------ userid
1 2 765611980448343721
2 6 765611980448343723
3 6 176561198044834371
4 6 176561198044834372
5 7 184582450892423483
6 7 423894024830294820
所有这一过程的结果是我应该在屏幕上打印为giftid数字6选择的用户ID是随机的以下用户之一: 176561198044834371 176561198044834372 176561198044834373
并且所选的giftid数字7随机地是以下用户之一: 184582450892423483 423894024830294820
有人可以帮我理解如何做到这一点吗?
答案 0 :(得分:0)
为什么要在PHP中进行过滤?这是非常低效的。为什么不简单地做
SELECT ...
FROM ...
WHERE time <= CURTIME()
答案 1 :(得分:0)
尽可能使用SQL语句。可能有一种方法可以将它们组合成一个,但这只是一个简单的例子:
$time = date("H:i");
$sql = $mysqli->query("SELECT gift_id FROM gifts WHERE gift_time <= '$time'");
while($row = $sql->fetch_array())
{
$gift = $row['g_id'];
$g_sql = $mysqli->query("SELECT * FROM giveaways WHERE gift_id = '$gift' ORDER BY RAND() LIMIT 1");
$g_row = $g_sql->fetch_array();
echo '<p>' . $g_row['user_id'] . '</p>';
}