2014-02-20 31 views
0

我有2個表具有唯一的ID。我有一個表格,其中一列是日期字段。我試圖過濾今天的日期(它工作)的字段中的所有行與「今天」日期我想獲得#key的單元格信息。一旦我有了這個ID,我想用#headkey匹配它。所以$ headkey == $ key。一旦我過濾了,我想看看是否有任何字段匹配= ItemID列的交付。出於某種原因,我有一個無限循環。我玩弄了邏輯,但似乎無法讓它工作。有任何想法嗎?PHP while while循環和if語句問題從多個表中提取

$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 />'; 
       } 
      } 
     } 
} 

* UPDATE: *我再次修改代碼。現在呢,如果它會把日期吐出1行然後像100回聲交付,然後回去並吐出另一個日期和相同的東西。仍然不確定發生了什麼事。

$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';     
       } 
     } 
    } 
} 
+0

積極它是一個無限循環,而不僅僅是一個長期運行的任務? – Zarathuztra

+0

@Zarathuztra - 是的。如果我刪除了當前處於$ DateInvoiced_date == $今日的IF語句中的任何內容,並且僅回顯出$ DateInvoiced_date,那麼我得到的行數不超過20行。所以在技術上,我應該只收到20回聲'送貨' – Yusof

+0

很酷,謝謝你的信息。調查 – Zarathuztra

回答

2

我使用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";