Mysql查询逻辑和一遍又一遍地返回相同变量的循环

时间:2013-10-15 10:08:07

标签: php mysql sql

嗨所以我做了一个查询,当我尝试循环结果时,它会反复循环输出相同的变量。它不是一个不确定的循环,因为数据太难以判断它是否已经循环了正确的次数。我要做的是:从customers表中选择所有不同的customer_uid,其中start_cycle_uid(来自start_cycle表)具有相同的customer_home id和传入的相同start_date。所以我将得到每个客户中的一个属于该开始日期的customer_home。我得到的是同一个customer_uid的列表。我的逻辑错了吗?

$homeQuery=$DB->prepare("select distinct customer_uid from customers
                            where start_cycle_uid =
                                (select uid from start_cycles
                                    where customer_home_uid=".$DB->quote_smart($_REQUEST['homeid'])."
                                    and start=".$DB->quote_smart($_REQUEST['start']).")");

$homeResult=$DB->query($homeQuery);
$homeRow=$DB->fetchArray($homeResult);  
if ($DB->numRows($homeResult) > 0) {
    for ($x=0; $x<=$DB->numRows($homeResult); $x++){
        echo $homeRow['customer_uid']."<br />";
    }
}

更新:当前代码如下所示:

$homeQuery=$DB->prepare("select distinct customer_uid from customers
                                where start_cycle_uid =
                                    (select uid from start_cycles
                                        where customer_home_uid=".$DB->quote_smart($_REQUEST['homeid'])."
                                        and start=".$DB->quote_smart($_REQUEST['start']).")");

    $homeResult=$DB->query($homeQuery);
    while($row = $DB->fetchArray($homeResult))
    {
       echo $row['customer_uid']."<br />";
    }

现在陷入无限循环。

2 个答案:

答案 0 :(得分:1)

你的逻辑是多余的。通常的做法是在存在行时迭代 - 然后您不需要检索行数。它就像

while($row = $DB->fetchArray($homeResult))
{
   //now you have $row as actual fethed DB row
}

- 这将有效,因为赋值将返回与$DB->fetchArray($homeResult)相同的内容 - 例如false当没有更多行时 - 这将导致循环结束。

答案 1 :(得分:0)

要获得下一行,您必须在循环内移动$homeRow = $DB->fetchArray($homeResult);。现在它只获得第一行,因为你只调用一次。

$DB->numRows($homeResult)放入变量以避免计算每次循环运行也是个好主意。