2017-12-09 12 views
0

ユーザアイテムを連続した昇順で割り当てるが、ユーザの以前に割り当てられたitem_idsに関しては連続したものにしたいアプリケーションがある。CodeIgniter ActiveRecordサブクエリの評価

-- Primary query. 
INSERT INTO user_items (user_id, item_id) VALUES (<user_id>, <item_id>); -- There are more fields, but they are not relevant to this question. 

-- Desired item_id value subquery. 
SELECT MAX(sq.item_id) + 1 from (select item_id from user_items where user_id = {$item_id}) as sq 

Iは、(サブクエリを持つ)完全なクエリをテストしており、クエリがデータベースで有効であるが、私はFALSEに等しい$escapeパラメータで$this->db->set()方法を使用する場合、ゼロを毎回挿入されます。サブクエリ(文字列として指定されている)は、insert()メソッドが呼び出される前に評価されているようです。

set()メソッドに、データベースの評価のために生成されたINSERTクエリにサブクエリを配置するように指示できますか?

答えて

0

この方法を使用すると、そのデータを読み取ることができ、同じ値を得ることができる並列クエリとなることができます。重複する可能性があります。

シーケンステーブルを作成し、生成されたIDの値をシーケンステーブルに格納します。新しいIDをassiginingについては、以下の手順を実行します。

  1. シーケンス選択テーブルをロックし、値をインクリメント。インクリメントされた値と
  2. 更新TNEエントリー
  3. あなたが同じのためのユニークな値を確保することができる方法更新された値

を使用

  • ロックを解除します。

  • +0

    データベースに評価をさせる方法はありますか?私は現在、外部ロックを実装するためにどのくらいの作業が必要なのかは分かりません。 – FluxIX

    +0

    この場合、ストアドプロシージャを使用して実行できます。しかし、コーディングを行う必要があります。 – Blakdronzer