2014-02-25 87 views
0

我在編寫下面的代碼時遇到了問題。我從兩個不同的表格中提取數據,並使用內部聯接將列鏈接在一​​起,工作正常。從headkey列中獲取數據時,可能有多行使用相同的「關鍵字」來標識訂單,然後我需要查看Delivery列以查看訂單是否具有值1或-1。我需要能夠將1和-1加在一起,所以如果一個訂單有一個1和一個等於0的-1,這意味着交貨被取消了。但是,如果訂單有1 +(-1)+1,那麼它將等於1.在這種情況下,這是交貨。如果headkey列中的值匹配,是否可以在delivery列中添加值?我想使用多維數組,但我沒有完全理解它們能夠實現它們。PHP - 如果其他列中的值重複,Mysql在單列中添加值

<?php 

$TransactionSql = " 
SELECT apcshead.Key 
, apcshead.DateInvoiced 
, apcshead.InvNum 
, apcsitem.Headkey 
, apcsitem.ItemID 
, apcsitem.Quantity 
, apcshead.CustomerCode 
, customers.BillTo1 
, customers.BillTo2 
, customers.City 
, customers.PostCode 
FROM customers 
INNER JOIN (apcshead INNER JOIN apcsitem ON apcshead.Key = apcsitem.Headkey) 
ON customers.CustomerCode = apcshead.CustomerCode"; 


$rs=odbc_exec($conn,$TransactionSql); 
while($row = odbc_fetch_array($rs)) 
{ 
$Key = odbc_result($rs,"Key"); 
$DateInvoiced = odbc_result($rs,"DateInvoiced"); 
$InvNum = odbc_result($rs,"InvNum"); 
$Headkey = odbc_result($rs,"Headkey"); 
$ItemID = odbc_result($rs,"ItemID"); 
$Quantity = odbc_result($rs,"Quantity"); 
$CustomerCode = odbc_result($rs,"CustomerCode"); 

$DateInvoiced = new DateTime($DateInvoiced); 
$DateInvoiced_date = $DateInvoiced->format('m-d-Y'); 

$DeliverySql = "SELECT Quantity, HeadKey FROM apcsitem WHERE HeadKey=20008"; 

if ($DateInvoiced_date == $Today) 
{ 
    if ($ItemID == 'Delivery' xor $ItemID == 'DeliveryCharge') 
    { 
    echo ' 
     <td class="td" valign="top">' . $Key . '</td> 
     <td class="td" valign="top">' . $DateInvoiced_date . '</td> 
     <td class="td" valign="top">' . $InvNum . '</td> 
     <td class="td" valign="top">' . $Headkey . '</td> 
     <td class="td" valign="top">' . $ItemID . '</td> 
     <td class="td" valign="top">' . $Quantity . '</td> 
     <td class="td" valign="top">' . $CustomerCode . '</td> 
     </tr> '; 
    } 
} 

} 

?> 

下面是該表的快照。 Table Example

精簡版

$TransactionSql = "SELECT * FROM apcsitem"; 

$rs=odbc_exec($conn,$TransactionSql); 
while($row = odbc_fetch_array($rs)) 
{ 
$Key = odbc_result($rs,"HeadKey"); 
$ItemID = odbc_result($rs,"ItemID"); 
$Quantity = odbc_result($rs,"Quantity"); 

if ($ItemID == 'Delivery' xor $ItemID == 'DeliveryCharge') 
{ 
echo ' 
     <td class="td" valign="top">' . $Key . '</td> 
     <td class="td" valign="top">' . $ItemID . '</td> 
     <td class="td" valign="top">' . $Quantity . '</td> 
     </tr> '; 
    } 
} 

下面是被一個困惑的員工:)

enter image description here

所以基本上我需要做一個真正的交易的例子能夠做的是如果第二列包含交貨或deliveryCharge將其過濾掉。然後,如果它們中的任何一個具有重複的HeadKey(第一列中的值)以僅爲經過濾的列添加最後一列的值。 AKA,與HeadKey相同的。在上面的圖片中,他們有Delivery和DeliveryCharge。他們添加並取消了他們。如果您添加基於組(交付)的最後一列,結果爲0,並且如果您將最後一列添加到組(DeliveryCharge),您也將得到0.事實上這意味着畢竟沒有交付!

+0

在您的示例中的所有行「交付」或「送貨費」。所以所有的行都會被過濾掉。所以這就是爲什麼你不會得到任何東西。優缺點是無關緊要的 - 我覺得你讓這個問題比它需要的複雜得多。如果我是你,我會重新開始,用最少的代碼來充分說明問題。 – Strawberry

回答

0

不要嘗試通過將業務邏輯轉換爲數學和來進行優化。

喜歡的東西:

$delivered = $order["ready"] === "yes" && $order["charged"] === "yes"; 
$cancelled = $order["ready"] === "yes" && $order["cancelled"] === "yes"; 

更加清晰。

我會考慮使用ENUM作爲true/false或yes/no的字段。這是很多更容易理解。你可以擁有任意數量的狀態,所以你不需要那些詭異的-1

+0

嗨 - 我希望我能控制這一點。帶有-1和1的數據實際上是從pos系統本身轉儲的,我無法改變它的工作方式...... – Yusof

0

我們可以開始與這個...

SELECT h.Key 
    , h.DateInvoiced 
    , h.InvNum 
    , i.Headkey 
    , i.ItemID 
    , i.Quantity 
    , h.CustomerCode 
    , c.BillTo1 
    , c.BillTo2 
    , c.City 
    , c.PostCode 
    FROM customers c 
    JOIN apcshead h 
    ON h.CustomerCode = c.CustomerCode 
    JOIN apcsitem i 
    ON i.Headkey = h.Key; 
+0

不確定我是否理解上述SQL語句。你是否建議我爲了這個問題和更好的流程對其進行修改? – Yusof

+0

是的。:-) – Strawberry

+0

完成:) - 還添加了一張我正在呼應的表格的圖片 – Yusof

相關問題