2012-01-13 3 views
1

データベーステーブルに特定のレコードが含まれているかどうかを確認する必要があるSQLクエリを実行しようとしています。存在する場合は、それ以外のレコードを追加しないでください。Magentoの既存のレコードをチェックするには?

私のテーブルのサンプルには、sample_id (auto-incremented), order_id, order_email_id, review_request, coupon_sentのようなフィールドが含まれています。それは$ idを取得するにはorder_ids (71, 74, 126, 165)

を持つ4つのレコードを持っている、私はこのクエリを持って、

$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)をチェックして、新しいを挿入する必要があり(71, 74, 126, 165, 166, 167)

が含まれていますもの(166, 167)。私はクエリをエコーし​​、それは戻ってきましたが、それでもまだ理想的ではないはずのids 166と167の 'Record already exists'が返されます

Magentoのテーブルの既存のフィールドの値をチェックする方法はありますか?

何か助けていただければ幸いです。事前のおかげで

+0

Magentoはなぜ自動スペースを作るのですか?その時点で '$ sample'に実際に何が入っていますか? – Wrikken

+0

$ sampleは、私のクエリにしたがって 'sample'テーブルの 'order_id'フィールドの値を含んでいます。 – ivn

答えて

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

+0

回答がコレクションから開始するように調整されました。 – clockworkgeek

+0

素晴らしい!出来た。対応する注文IDのすべての電子メールIDを取得する同様の関数[getAllIds()]がありますか?私は両方の注文IDを格納する必要があり、私の 'サンプル'テーブルにそれぞれの電子メールIDです。しかし、あなたの修正された答えに感謝します。 – ivn

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

+0

私は知らない、SQL JOINテクニックを使用しましたか?たとえば、SQL IN演算子は、ターゲット表/フィールドで使用可能な値をチェックする必要があります。あなたは値を返す単一のクエリで行うことができますユニークな行です。その結果、両方のテーブルで利用可能な行のみが表示されます。 –

+0

@ivn私は 'null'について疑問に思っています、あなたは' null'と等しい値を返すでしょうか? '$ sample'をエコーし​​、結果をplsしてみましょう。 –

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

関連する問題