从数据库中选择随机值并将其链接到另一行

时间:2013-02-08 20:50:30

标签: php mysql select random

我正在尝试链接数据库中的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

有人可以帮我理解如何做到这一点吗?

2 个答案:

答案 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>';
}