2012-01-13 15 views
1

我想執行一個SQL查詢類型的事情,我需要檢查我的數據庫表是否包含特定的記錄。如果是這樣,則不要添加其他不存在的記錄。如何檢查Magento中已有的記錄?

我的表格樣本包含像sample_id (auto-incremented), order_id, order_email_id, review_request, coupon_sent這樣的字段。它得到了具有order_ids (71, 74, 126, 165)

4條

爲了獲得$ IDS,我有這個疑問,

$to_date = date('Y-m-d H:i:s',strtotime('-3 days')); 
$orders = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('status', 'complete')->addFieldToFilter('updated_at',array('to' => $to_date))->addAttributeToSelect('customer_email')->addAttributeToSelect('entity_id'); 
foreach($orders as $order) 
{ 
    $email = $order->getCustomerEmail(); 
    $id = $order->getEntityId(); 
    $sample = Mage::getModel('sample/sample')->getCollection()->addFieldToFilter('order_id', $id)->addFieldToSelect('order_id'); 
    if($sample != null) 
    {echo "Record already exists";} 
    else 
    { 
    echo "Insert this record"; 
    $sample->setOrderId($id); 
    } 
} 

$id包含(71, 74, 126, 165, 166, 167)

因此理想情況下,下面的查詢應該檢查對現有記錄(71, 74, 126, 165)並插入新(166, 167)。我回應的查詢,它回來了,但它仍然回顯'記錄已存在'的ids 166和167,理想情況下它不應該

是否有任何其他方式來檢查Magento表中的現有字段的值?

任何幫助表示讚賞。在此先感謝

+0

爲什麼'''',Magento會自動創建一個空間?那個時候'$ sample'實際上是什麼? – Wrikken 2012-01-13 17:50:49

+0

$ sample根據我的查詢包含'sample'表中'order_id'字段的值。 – ivn 2012-01-13 20:39:01

回答

3

它可以使用collection filtering幾個步驟完成。

$wantedIds = $orders->getAllIds(); 
$sample = Mage::getModel('sample/sample')->getCollection() 
    ->addFieldToFilter('order_id', array('in' => $wantedIds) 
    ->addFieldToSelect('order_id'); 
$presentIds = $sample->getColumnValues('order_id'); 
$newIds = array_diff($wantedIds, $presentIds); 

最後一步爲您提供仍需要創建的ID。因爲它們是一個數組,所以很容易使用它們。

foreach ($newIds as $id) { 
    Mage::getModel('sample/sample') 
     ->setOrderId($id) 
     ->save(); 
} 
+0

嗯,我應該提到一個事實,即我的$ id來自另一個查詢,因此我不確定這是否可以按照您提及的方式作爲數組傳遞。儘管我已經編輯了這個問題。 – ivn 2012-01-13 20:54:22

+0

答案調整爲從集合開始。 – clockworkgeek 2012-01-13 22:41:19

+0

太棒了!有效。是否有類似的函數[如getAllIds()]來檢索相應訂單id的所有電子郵件ID?因爲我需要在我的'樣本'表中存儲訂單ID和相應的電子郵件ID。但是,謝謝你的修改答案。 – ivn 2012-01-15 15:35:27

0

連接Magento的數據庫:

$conn = Mage::getSingleton('core/resource')->getConnection('core_read'); 

// perform sql queries 
$result = $conn->fetchAll("SELECT * FROM sample;"); 
foreach($result as $rows) { 
    echo $rows['order_ids'] . "\n"; 
} 

所以,你可以用一個簡單的SQL表達式用這種方式。

+0

感謝您的回覆。即使我已經準備了一個使用Magento方式及其正確的SQL查詢。但是使用該查詢的結果集,我不知道如何使用從我的查詢中獲得的值來檢查另一個表中現有字段的值。 – ivn 2012-01-13 21:04:28

+0

我不知道,你用過SQL JOIN技術嗎?例如,SQL IN操作符應檢查目標表/字段中可用的值。你可以通過單個查詢來完成,這是返回值將是唯一的行。因此,喲將只有在這兩個表中可用的行。 – 2012-01-13 21:50:14

+0

@ivn我懷疑'null',你確定返回值等於'null'嗎?嘗試echo'$ sample'並讓我們得到結果。 – 2012-01-13 22:02:28

1

爲了檢查定製表中的值/條件是否存在,嘗試爲:

$collection = Mage::getModel('custom-module/entity-model')->getCollection()->addFieldToFilter('field-to-check', $value_to_check)->getFirstItem(); 
if($collection->getId()){ 
    //such condition/value exists 
}else{ 
    //such condition/value doesn't exist 
} 

只是一個概念。
謝謝

+0

感謝您的回覆,但我已經嘗試過您的方法和@clockworkgeek建議的答案是我一直在尋找的。但是,感謝您的幫助和興趣。欣賞它! – ivn 2012-01-17 09:25:05

相關問題