检查是否填充了MySQL行

时间:2011-01-22 16:37:29

标签: php mysql

我有一个写入MySQL表的页面。该表有一定数量的行(24)。

我有一个由rand()函数设置的$ id变量。我基本上想要在$ id处拉行,所以如果$ id为3,我想拉第三行。然后,我想检查该行是否设置了价格(表示该行正在使用)。如果没有价格,我想将$ id保持在已设置的值并继续查询。如果有价格,我想重新随机化$ id变量,并再次检查该行是否已用完。当它找到一个空行时,继续查询。

我的解决方案半工作,但由于某种原因,似乎有超过10%的机会覆盖已用过的行。我希望它永远不会覆盖用过的行。

这是我的代码:

    mysql_select_db("delives0_booklet", $con);

    $query = "SELECT * FROM booklet WHERE id = '$id'";

    $res = mysql_query($query,$con);

    $newId = $id;

    while($row = mysql_fetch_array($res))
    {
        if($row['price'] != 0)
        {
            do{
                $newId = rand(1, 24);
            }while($newId == $id);
        }
    }
    $id = $newId;
    mysql_query("UPDATE booklet SET price = '$price', advertiser = '$advertiser', image = '$image', monthsRemaining = '$monthsRemaining', availability = 1 WHERE id = '$id'");

修改 我有这个想法。我遍历表格,然后将每个未填充点的“id”放入数组中。然后我从那个数组中随机挑选。但是,似乎有一个我找不到的错误,因为即使在循环运行之后,数组仍然显示其中没有任何内容,并且$ i是正确的数字。

        mysql_select_db("delives0_booklet", $con);

    $query = "SELECT * FROM booklet";

    $res = mysql_query($query,$con);
    $i = 0;
    $isEmpty = array();

    while($row = mysql_fetch_array($res))
    {

            if($row['price'] == 0)
            {
                $isEmpty[i] = $row['id'];
                $i = $i + 1;
            }
    }
    echo $i . " unfilled spots.";
    $n = 0;
    while($n<$i)
    {
        echo $isEmpty[$n];
        $n = $n + 1;
    }
    if($i > 0)
    {
        $id = $isEmpty[rand(0, $i)];
    }
    if($i == 0)
    {
        echo 'All spots have been filled.';
    }

2 个答案:

答案 0 :(得分:1)

我认为这是一个顶级逻辑问题。因为您使用随机ID填充,所以可以获得重复的ID,因此当您更新“WHERE id ='$ id'”时,您可能会选择已填充的行。

我不知道你的目标,但也许使用自动增量ID,并删除你想要摆脱的行,是要走的路。一组滚动的行(一次24个)但是不断增加的id会阻止一个人误认为另一个。

答案 1 :(得分:1)

如果我理解问题是正确的,这应该有效:

SELECT * 
FROM booklet
WHERE price = 0 OR price IS NULL
ORDER BY RAND()