从多个表中提取时 PHP while 循环和 if 语句问题

Posted

技术标签:

【中文标题】从多个表中提取时 PHP while 循环和 if 语句问题【英文标题】:PHP while loops and if statement issues when pulling from multiple tables 【发布时间】:2014-02-20 01:28:07 【问题描述】:

我有 2 个具有唯一 ID 的表。我有一个表格,其中一列是日期字段。我正在尝试从具有“今天”日期的所有行中按今天的日期(它有效)过滤该字段,我想获取#key的单元格信息。获得该 ID 后,我想将其与#headkey 匹配。所以 $headkey == $key。过滤后,我想查看是否有任何字段匹配 = ItemID 列的交付。出于某种原因,我有一个无限循环。我玩弄了这个逻辑,但似乎无法让它发挥作用。有什么想法吗?

 $TransactionSql = "SELECT * FROM apcshead WHERE DateInvoiced > 0 ORDER BY DateInvoiced DESC";
 $ItemsSql = "SELECT * FROM apcsitem";

 $rs=odbc_exec($conn,$TransactionSql);
while($row = odbc_fetch_array($rs)) 
   
    //Grabbing Transaction info     
    $DateInvoiced = odbc_result($rs,"DateInvoiced");
    $ApcsheadKey = odbc_result($rs,"Key");

    $DateInvoiced = new DateTime($DateInvoiced);
    $DateInvoiced_date = $DateInvoiced->format('m-d-Y');
    //$TimeStamp_time = $TimeStamp->format('h:i:s');

    if ($DateInvoiced_date == $today)
        

            $ItemsRs=odbc_exec($conn,$ItemsSql);
            while($row = odbc_fetch_array($ItemsRs)) 
            
            $HeadKey = odbc_result($ItemsRs,"HeadKey");
            $ItemID = odbc_result($ItemsRs,"ItemID");

            if ($ItemID == 'Delivery')
                                       
                    echo 'Delivery';
                    echo '<br />';
                
            
        

*更新:*我再次修改了代码。现在如果它用日期吐出 1 行然后像 100 echo Delivery 然后返回并吐出另一个日期和相同的东西怎么办。仍然不确定发生了什么。

 $TransactionSql = "SELECT * FROM apcshead WHERE DateInvoiced > 0 ORDER BY DateInvoiced DESC";
 $ItemsSql = "SELECT * FROM apcsitem";

 $rs=odbc_exec($conn,$TransactionSql);
    while($row = odbc_fetch_array($rs)) 
   
$DateInvoiced = odbc_result($rs,"DateInvoiced");
$DateInvoiced = new DateTime($DateInvoiced);
$DateInvoiced_date = $DateInvoiced->format('m-d-Y');

 echo $DateInvoiced_date;
 echo '<br />';

if ($DateInvoiced_date == $Today)
    
    echo $DateInvoiced_date;
    echo '<br />';

        $ItemsRs=odbc_exec($conn,$ItemsSql);
        while($row = odbc_fetch_array($ItemsRs)) 
        
        $ItemID = odbc_result($ItemsRs,"ItemID");

            if ($ItemID == 'Delivery')
                
                echo 'Delivery';                
                  
           
    
   

【问题讨论】:

肯定这是一个无限循环,而不仅仅是一个长时间运行的任务? @Zarathuztra - 是的。如果我删除当前在 $DateInvoiced_date == $today 的 IF 语句中的任何内容,并且只是回显 $DateInvoiced_date,我得到的行数不会超过 20 行。所以从技术上讲,我应该只得到 20 个“交付”的回声 酷,感谢您的信息。调查 @Zarathuztra - 谢谢。我所能确定的是,我搞砸了那个循环中的某些东西,但似乎不知道它是什么 我注意到您正在创建行但没有使用它们。你试过吗?怀疑它会导致你的循环,只是有点大扫除。 【参考方案1】:

我使用 INNER JOIN 命令解决了这个问题。这很棒,因为我不必做嵌套循环:) 从 W3Schools 学习了如何做到这一点。 http://www.w3schools.com/sql/sql_join_inner.asp

这是我当前的 SQL 语句:

 $TransactionSql = "SELECT apcshead.Key, apcshead.DateInvoiced, apcshead.InvNum, apcsitem.Headkey, apcsitem.ItemID FROM apcshead INNER JOIN apcsitem ON apcshead.Key=apcsitem.Headkey";

【讨论】:

以上是关于从多个表中提取时 PHP while 循环和 if 语句问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在单页中使用 php 从 while 循环中生成多个读取更多按钮?

在单个表中使用while循环进行多个选择查询?可能吗?

如何使用php中的while循环显示从数据库中获取的多个图像中的特定点击图像,以及用于显示的javascript?

使用 PHP 和 mysqli 从多个 MySQL 表中获取数据

PHP - IF 语句在 While 循环中始终为真

从多个mysql表中提取数据