我有一个应用程序,我希望以连续的升序顺序分配用户项目,但只对用户以前分配的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
查询中以便对数据库进行评估?
答案 0 :(得分:0)
以这种方式使用它将不是一个好的选择/命题,因为可以是可以读取该数据并仍然获得相同值的并行查询。可能存在重复值。
而是创建一个序列表,将生成的ID的值存储在序列表中。要分配新ID,请执行以下步骤:
这样你可以确保同样的价值。