- ベストアンサー
AUTO_INCREMENTを2つ設定する方法
- PHPで既存の記事を複製する際、link_idにもAUTO_INCREMENTを設定する方法について不可能か調査しました。INSERT前ではAUTO_INCREMENT後の値は取得できないため、他の方法を探しています。皆様はどのように値の重複を避ける処理を行っているでしょうか?
- PHPでの既存記事の複製処理で、link_idにもAUTO_INCREMENTを設定したいと考えていますが、仕様上不可能なことがわかりました。INSERT前ではAUTO_INCREMENT後の値は取得できないため、他の方法を模索しています。皆様はどのように値の重複を避ける処理を行っているのでしょうか?
- PHPでの既存記事の複製処理で、link_idにもAUTO_INCREMENTを設定する方法を探しています。しかし、仕様上不可能なことがわかりました。INSERT前ではAUTO_INCREMENT後の値は取得できないため、別の手段を模索しています。皆様はどのように値の重複を避ける処理を行なっているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
前回答者さんと同じですが、まったく同じものを別カラムに持つのは意味を感じないので、構成の一考が必要かもしれませんね。 ただ、ここはPHPの質問コーナーなので、PHP上での都合と想像してみました。 SQLのテーブルでは一つのレコードに一意保証されたPRIMARY KEYが必要で、多くのAUTO_INCREMENTはこの一意を保証するために使われていると思います。 また、SQLでは別のカラムにAUTO_INCREMENTを設定することも可能ですが、この辺はPHPではなくSQLの仕様や望むテーブル構成により決定するものです。 なので、AUTO_INCREMENTはSQLのテーブル設計で決定しているはずだし、まだ存在していないレコードのIDも存在もしていない事になります。 なので新たなレコードをINSERTした後でないとそのIDも確認できませんし、存在しないIDを移すような処理もできません。 なので、僕ならと言う感じでPHPでの処理ですが。 ・新しいレコードをINSERTする。 ・LAST_INSERT_IDで直前にINSERTされたレコードのIDを取得する。 ・取得したIDからご質問の「link_id」を作成してそのIDのレコードにUPDATEする。 な感じで処理します。
その他の回答 (1)
- agunuz
- ベストアンサー率65% (288/438)
link_id用に、それ用のテーブルを作る。そちらにinsertしたあとでlast_insert_idを取得し、それをlink_idとして(本来のテーブルに)insertする。 というか、その「link_id」というのは何のために必要なのでしょうか(何を記録するカラムなのか)。「テーブルで一意な値」ならidだけでいいので、それ以外の用途があるのだと思います。その用途によって「どう付番するか」は考えるべきだと思いますが・・・