我正在尝试执行一种SQL查询,我需要检查我的数据库表是否包含特定记录。如果是,则不做任何其他事情添加不存在的记录。
我的表格示例包含sample_id (auto-incremented), order_id, order_email_id, review_request, coupon_sent
等字段。它有4条记录order_ids (71, 74, 126, 165)
要获得$ 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 :(得分: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();
}
答案 1 :(得分: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
}
只是一个概念 感谢
答案 2 :(得分: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表达式。