【问题标题】:How to get last insert id when using sub query in Kohana在 Kohana 中使用子查询时如何获取最后一个插入 ID
【发布时间】:2012-11-09 22:49:53
【问题描述】:

在 Kohana 中使用子查询时如何返回正确的 $insert_id?

我使用查询方法返回$insert_id 和$affected_rows。它为 $affected_rows 返回正确的值,但为不正确的 $insert_id 返回“1”。

以下查询:

$sub = DB::select('id', 'username', 'email', 'lastVisitDate')->from('jos_users');

$qry_migrate_users = DB::insert('temp_users', array('old_id', 'username', 'email_work', 'last_login'))->select($sub);

list($insert_id, $affected_rows) = $qry_migrate_users->execute($this->conn_target);

【问题讨论】:

  • 请注意,MySQL 返回 first 插入行的最后插入 id。
  • 我怀疑但不确定。我推测是因为我使用的是子查询,所以没有办法实际返回最后一个插入 id?
  • 当然,您可以使用old_id 值从temp_users 中选择新行并获取最大id。但是为什么你需要最后一个插入 id?
  • 插入 id 存储在另一个表中,以便在从 jos_users 表中进一步迁移新用户时参考。我应该更好地表达我的回应。我可以获得最后一个插入 id,但想知道为什么它不能通过 Kohana 建议的方法工作。正如您所说,它正在为第一行返回正确的值。感谢您的澄清!

标签: subquery kohana lastinsertid


【解决方案1】:

MySQL 仅返回最后一个插入 ID 和受影响的行。只有一种方法可以做你想做的事 - 执行你的子选择到数组,并使用 foreach 做单次插入。但它的操作有点慢!或者在插入之后做这样的事情:

SELECT id FROM temp_users WHERE email IN (select email from jos_users)

你可能明白其中的逻辑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2011-02-25
    • 1970-01-01
    • 2014-02-18
    • 2012-02-12
    相关资源
    最近更新 更多