CodeIgniter:如何使用活动记录将一个列值移动到另一个具有 Where 条件的值

Posted

技术标签:

【中文标题】CodeIgniter:如何使用活动记录将一个列值移动到另一个具有 Where 条件的值【英文标题】:CodeIgniter: How to move one column value to another with Where condition using active record 【发布时间】:2021-03-30 20:01:12 【问题描述】:

我想将一列值移动到另一列值,例如有两个表列'Location','Call_Location' 我想将 'Call_location' 的所有值移动到 'Location' 列,并且仅具有选定日期范围的条件。在codeigniter中怎么做。

$text = "UPDATE phone_acc SET location = call_location WHERE dt >= 
dateformat(current_date, '%Y-%m-01')
AND dt < dateformat(current_date, '%Y-%m-01') + interval 1 month;
$this->db->query($text);

这不起作用。

其中一个问题发现它将第二个字段名称作为字符串值“call_type”,而它应该将其作为字段名称。

    UPDATE `phone_acc` SET `location` = 'call_type' WHERE `call_date` = '2020-11- 
   01 01:33:51'

【问题讨论】:

你真正想要什么?? 将列值复制到另一列。这是一种批量更新,会影响数千条记录。 两列数据类型相同?? 是字符串。查询中似乎没有问题。但它仍然无法正常工作。数据库方面没有问题。 我需要使用update_batch()吗 【参考方案1】:

您的查询缺少当月的条件。假设日期存储在dt 列中,您会这样做:

UPDATE phone_acc 
SET location = call_localtion 
WHERE id = 50959757 AND dt >= dateformat(current_date, '%Y-%m-01')

对于满足where 谓词的每一行,这会将一个值从一列复制到另一列同一行

如果您的数据中有未来日期,也请使用上限:

dt >= dateformat(current_date, '%Y-%m-01')
AND dt < dateformat(current_date, '%Y-%m-01') + interval 1 month

【讨论】:

抱歉,我错过了我编辑帖子的查询中的日期。但这不是我面临的问题。它就像一个影响数千条记录的批量更新。查询运行,最后它说找不到页面错误....但即使是单个选定的记录也没有更新。不知道出了什么问题。

以上是关于CodeIgniter:如何使用活动记录将一个列值移动到另一个具有 Where 条件的值的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 活动记录查询

如何在codeigniter活动记录中使用select插入记录

codeigniter 活动记录,生成,但不执行查询

CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?

如何从 codeigniter 活动记录中的 DATETIME 字段中获取 d-m-Y 格式的日期?

如何在 codeigniter 活动记录中设置 group_concat_max_len?