CodeIgniter ActiveRecord子查询Evalulation

时间:2017-12-09 16:35:46

标签: php codeigniter activerecord

我有一个应用程序,我希望以连续的升序顺序分配用户项目,但只对用户以前分配的item_ids有连续性。

-- 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

我已经测试了完整的查询(使用子查询)并且查询在数据库上有效,但是当我使用$this->db->set()方法且$escape参数等于FALSE时,每次插入一个零;似乎在调用insert()方法之前评估子查询(指定为字符串)。

我是否可以指示set()方法将子查询放入生成的INSERT查询中以便对数据库进行评估?

1 个答案:

答案 0 :(得分:0)

以这种方式使用它将不是一个好的选择/命题,因为可以是可以读取该数据并仍然获得相同值的并行查询。可能存在重复值。

而是创建一个序列表,将生成的ID的值存储在序列表中。要分配新ID,请执行以下步骤:

  1. 锁定序列表
  2. 选择,增加值。
  3. 使用递增值更新条目
  4. 释放锁
  5. 使用更新后的值
  6. 这样你可以确保同样的价值。