0

PHPコードが1つの行からランダムに値を選択し、それを2番目の行にリンクするように、データベース内の2つの行をリンクしようとしています。例:

<?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 が選択されていることがわかります。正しいギフト ID が選択されると、システムは、2 行目の と呼ばれる同じギフト ID を選択することによって、勝者をランダムに選択しようとしますgiveaways

しかし、何らかの理由でそれが機能していません..

データベースの抽象化は次のとおりです。

ギフト

時間はプレゼントの終了時間を表しています。

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 が次のユーザーのいずれかであることが画面に出力されます。

選択されたgiftid番号7は、ランダムに次のユーザーの1人です: 184582450892423483 423894024830294820

誰かがそれを行う方法を理解するのを手伝ってくれますか?

4

2 に答える 2

0

SQLステートメントで可能な限り実行します。それらを1つに組み合わせる方法はおそらくありますが、ここに簡単な例を示します。

$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>';
}
于 2013-02-08T22:08:17.677 に答える
0

PHPでフィルタリングを行うのはなぜですか? 非常に非効率です。なぜ単純にしないのですか

SELECT ...
FROM ...
WHERE time <= CURTIME()
于 2013-02-08T21:17:37.390 に答える