1

見てくれてありがとう!

バックグラウンド

私はLAMPスタックの経験がほとんどありませんが、最近、LAMPスタックに基づくOpenCartを使用するオンラインストアを開始しました。

このストアでは、顧客に報酬ポイントを割り当てることができ、アカウントを作成するためだけに、新しい顧客ごとに10ポイントを与えています。

残念ながら、OpenCart管理GUIでは、一度に1人のユーザーしか手動でこれを実行できません。

ただし、MySqlコマンドを実行できるインターフェイスにアクセスできるので、このアプローチを使用して問題を解決したいと思います。

OpenCartによって作成されたデータベース内に、oc_customerすべての顧客を含むテーブルがあり、次にoc_customer_reward、顧客IDをキーオフして、顧客にポイントが付与されるたびに新しいレコードを割り当てるテーブルがあります。これは次のようになります。

oc_customer_reward

質問

oc_customerの顧客がテーブルに存在しないかどうかを確認し、存在しない場合は、その顧客oc_customer_rewardのレコードoc_customer_reward(10ポイント相当)をテーブルに作成するMySqlクエリを作成するにはどうすればよいですか?

私は(本当に提供したいのでない限り)動作するコードを求めておらず、自分で作業を行うつもりですが、率直に言って、どこから始めればよいのかわかりません。アプローチは何でしょうか?

アップデート

オラフの提案によると、私はoc_customer_reward彼の提案されたクエリでテーブルにないすべての顧客を得ることができます:

SELECT customer_id
FROM oc_customer
WHERE customer_id NOT 
IN (
SELECT customer_id
FROM oc_customer_reward
)

ここで、そのクエリの結果を繰り返して(申し訳ありませんが、私はデータベースの担当者ではありません!)、oc_customer_rewardそれぞれに行を挿入する必要があります。foreachC#のループのようなものです。何かご意見は?

4

2 に答える 2

3

まず、報酬テーブルにない顧客を見つけます。

select customer_id from oc_customer
    where customer_id not in (select customer_id from oc_customer_reward);

次に、それを取得して、報酬テーブルにエントリを挿入します。

insert into oc_customer_reward (customer_id, points)
    select customer_id, 10 from oc_customer
        where customer_id not in (select customer_id from oc_customer_reward);

これはテストされていませんが、開始に役立つことを願っています。

于 2012-10-24T21:57:46.997 に答える
0

テストされておらず、oc_customerのテーブル構造について不明ですが、次のクエリが役立ちます

INSERT INTO oc_customer_reward ( customer_id, description, points, date_added ) 
 SELECT customer_id, 'reward for registration', 10, CURRENT_TIMESTAMP FROM oc_customer WHERE NOT EXISTS ( SELECT * FROM oc_customer_reward r WHERE r.customer_id = oc_customer.customer_id );

EXISTSステートメントの詳細については、こちらをご覧ください。

http://dev.mysql.com/doc/refman/5.5/en//exists-and-not-exists-subqueries.html

于 2012-10-24T22:24:15.570 に答える