3


0

あるテーブルの値を別のテーブルに挿入し、同じクエリのフィールド値を更新することは可能ですか?

テーブルが2つあります。 1つのテーブルはトランザクション履歴として機能するためのもので、もう1つのテーブルはメンバーの詳細のログです。 レポートを実行するときに、メンバーの詳細の一部をトランザクション履歴に移動しますが、それ以外では存在しないフィールドレコードも更新します。

特定の条件を満たすすべてのレコードを選択し、一致する行の一部のみを別のテーブルに挿入し、単一のクエリで他のフィールドを更新することは可能ですか?

例えば:

表2では、メンバー名、登録日、およびメンバーIDがあります。 上記のレコードを表1に移動しますが、「処理済み」に等しいフィールド(ステータス)も更新します。

注:phpとpdoを使用してmysqlデータベースに接続しています。

これは単一のクエリ内で可能ですか?

3 Answer


1


更新する行が挿入する行と同じかどうかを指定しませんでした。 私は彼らがいると仮定しています:

insert into table1
(member_name, date_registered, memberid, status)
select member_name, date_registered, memberid, 'processed'
from table2
where SomeField = MyCriteria


1


十分に検討した後、ircmaxellのアドバイスを使用して、単純に複数のクエリを実行することにしました。 物事が簡単になるだけでなく、並べ替えをはるかに簡単にカスタマイズできるようになります。

彼が上で言ったように、「少ないというtrapに巻き込まれないことが常に良い」


0


Yes:

SELECT *, "processed" INTO table2 FROM table1

テーブル構造に基づいて適応する必要があります。おそらくすべてのフィールドを書き出すこともできます。

SELECT field1, field2, field3, "processed" INTO table2 FROM table1

注目すべきは、他のテーブルの「処理済み」がより複雑になる場合は、処理済みの変数(ブール値をお勧めしますか?)を含むテーブル2に書き込むことを前提としています。

編集: mysqlはselect intoをサポートしていないようです…​

INSERT INTO table2 SELECT field1, field2, field3, "processed" FROM table1

Redfiltersコードの動作