如何更新MySQL加入另一个表的表A?

时间:2013-09-06 14:43:54

标签: mysql codeigniter activerecord join

我有stats表,其中user_id。 我有一个users表,其id与上面的user_id相对应。我在employee表中也有一个users标记。

我想更新stats表中user_id不是员工的所有记录。

理想情况下,我想通过CodeIgniter Active Record执行此操作,但我也可以使用原始查询。

谢谢!

编辑我的尝试

if($employee == false) {
  $this->db->where('(default_profiles.opid = 0 OR default_profiles.opid IS NULL)');  
} else {
  $this->db->where('default_profiles.opid > 0');
}
$this->db->join('weekly_stats', 'default_weekly_stats.user_id = default_profiles.user_id');

$this->db->update('default_weekly_stats', $data);

但是,这只会产生:

UPDATE `default_weekly_stats` SET `rank` = 1 WHERE `default_weekly_stats`.`week` = '1' AND `default_weekly_stats`.`correct_picks` = '4' AND (default_profiles.opid = 0 OR default_profiles.opid IS NULL)

2 个答案:

答案 0 :(得分:1)

没试过但可能应该是这样的:

$this->db->where_not_in('users.employee_flag', '0')->join('users', 'users.user_id = stats.user_id')->update('stats', $data);

编辑:(基于@dianuj答案)

$this->db->set('rank', $rank );
if($employee == false) {
  $this->db->where('(default_profiles.opid = 0 OR default_profiles.opid IS NULL)');  
} else {
  $this->db->where('default_profiles.opid > 0');
}
$this->db->update('weekly_stats ON default_weekly_stats.user_id = default_profiles.user_id');

答案 1 :(得分:0)

update stats s
inner join users u on u.id = s.user_id
                   and u.employee = 0
set some_column = 'some_value'