2005年5月17日

トラックバック先管理 SQL文覚え書き

樺太梟(からふとふくろう)。天王寺動物園にて。全長が80センチ位ある大きな個体。目の大きさというのは,体の大きさに比例しないので小さな目に見えます。 トラックバック管理システムを作成していてちょっと悩んでいた作業が取りあえず解決。
 所詮素人なのでいろいろ試さないと分からないことが多いし,分かったと思ってもそれが正解かどうか分からないのが素人の辛いところ。

 取りあえず悩んでいたのが,一つのポストに対して複数のトラックバックを選択したことをデータベースに記憶させるのですが,それをどうやって実現しようかということです。
 formを使って,selectで複数の項目を選択させることは可能なんだけれど,それをポスト?トラックバックという一組の組み合わせとして,複数のレコードを作ることになります。sqlのinsert文は一個ずつしかデータを入れられないんで,ループで廻さないといけないのですが,postで送られてきた例えば「1,5,7」というデータを配列に変えて配列の要素を取り出しながらinsertしていくという方法を思い付いたのだけれど,配列ってなんか苦手意識があって,使いたくないのでした。軟弱ものです。

 で,MySQLのマニュアルを読んでいたら,insert into --- select --- という便利な構文が使えることが分かりました(以前使ったことを忘れていた)。この構文を使うと特定のテーブルにあるデータを条件設定して別のテーブルに一気に流し込めるという便利な構文です。これは使えそう。

 要はトラックバックの先を管理しているテーブルからフォームで指定した値を条件として指定できるようにすれば解決です。

 ということで, insert ignore into トラックバック履歴 (ポストID, トラックバック先ID) select ポストID, トラックバック先ID from トラックバック先管理テーブル where (トラックバック先ID in (選択されたトラックバック先ID) = 1 という構文でデータの取り込みが一発で取り込めました。便利だ。

 素人仕事ですが一歩進化しました。

0 件のコメント: