0

テーブルに存在するデータを編集する必要があります。編集時に、古いデータのコピーを保持したい。updateしたがって、ステートメントを使用する代わりに、を使用してinsert、新しい更新されたデータを同じテーブルに挿入しています。どちらのデータセットにもid同じものがあるため、変更を追跡するのに役立ちます。テーブルにはautoincrementフィールドもあります。以下のようなもの:

> id Data            Data_id
> 1. Data1                01
> 2. Data1_edit1          01
> 3. Data2                02
> 4. Data2_edit1          02

id はautoincrementです。Data_id は、変更のログを保持するのに役立ちます。テーブルもtimestampable。Data1 のタイムスタンプが Data1_edit1 よりも低くなるようにします。

Data2ie id 4& Data1ieの最新の更新されたレコードを取得したいid 2とします。次を使用してこれを実行しようとしています。

-> select("*") 
-> from("data")
-> groupBy("Data_id")

予想どおり、これはData1&を返しますが、どうすればandData2を返すことができますか?Data1_edit1Data2_edit1

使用してDoctrine 2おり、Mysql

助けていただければ幸いです。

ありがとうございました。

4

2 に答える 2

2
select * from yourtable
where id in(select max(id) from yourtable group by data_id)

正常に動作しています。SQL フィドル

SQL フィドルのデモ

于 2012-09-27T10:27:54.527 に答える
1

これを試すことができます:

select * from data where (data_id, id ) in ( select data_id, max(id) from data group by Data_id );
于 2012-09-27T10:14:33.547 に答える