0

主キーIDがAUTO_INCREMENTに設定された次のテーブルmy_tableがあります。

id  group_id  data_column
1   1         'data_1a'
2   2         'data_2a'
3   2         'data_2b'

['data_3a', 'data_3b'] などのデータの配列を取得し、group_idを適切にインクリメントして生成するクエリを作成しようとして立ち往生しています。

id  group_id  data_column
1   1         'data_1a'
2   2         'data_2a'
3   2         'data_2b'
4   3         'data_3a'
5   3         'data_3b'

WITH 句を使用すると簡単に実行できると思いますが、これは MySQL ではサポートされていません。私は SQL に非常に慣れていないので、データを間違った方法で整理している可能性があります。(グループは、フォームを介して一緒にアップロードされたファイルのグループを表すと想定されています。各行は単一のファイルであり、データ列にはそのパスが格納されます)。

私が考えていた「疑似 SQL」コードは次のとおりです。

INSERT INTO my_table (group_id, data_column)
VALUES ($NEXT_GROUP_ID, 'data_3a'), ($NEXT_GROUP_ID, 'data_3b')
LETTING $NEXT_GROUP_ID = (SELECT MAX(group_id) + 1 FROM my_table)

ここで、構成された 'LETTING' 句は、クエリの開始時に 1 回だけ評価されます。

4

2 に答える 2

1

select max(group_id)+1 を実行してトランザクションを開始してから、挿入を実行できます。または、テーブルをロックして、他の人が変更 (挿入) できないようにすることも可能です。

于 2012-04-15T09:01:19.753 に答える
0

グループが一緒に属するファイルを表している場合、特にこのグループに関するメタデータ (アップロードしているユーザー、日付など) を保存したい場合は、グループ用に別のテーブルが必要です。そうしないと (この場合)、冗長なデータが得られます (ほとんどの場合、これは悪いことです)。

あるいは、MySQL には変数のようなものがあります。http://dev.mysql.com/doc/refman/5.1/en/set-statement.htmlをチェックしてください

于 2012-04-15T11:39:19.303 に答える