【问题标题】:CodeIgniter ActiveRecord Subquery EvalulationCodeIgniter ActiveRecord 子查询评估
【发布时间】:2017-12-09 16:35:45
【问题描述】:

我有一个应用程序,我希望以连续的升序分配用户项目,但仅与用户先前分配的 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

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

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

【问题讨论】:

    标签: php codeigniter activerecord


    【解决方案1】:

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

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

    1. 锁定序列表
    2. 选择,增加值。
    3. 使用增量值更新条目
    4. 释放锁
    5. 使用更新后的值

    这样您就可以确保相同的独特价值。

    【讨论】:

    • 有没有办法让数据库进行评估?我现在不确定实现外部锁定需要做多少工作。
    • 在这种情况下你可以使用存储过程来做到这一点。但是编码需要完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多