[eluser]Christopher Clarke[/eluser]
I know this works with $this->db->where, so it might work with set as well:
$this->db->set('`balance` = (`balance` - '.$amount.')');
You'll need to remove $data from $this->db->update.
I haven't tested the above, but similer code works with where.
Like I have the following and it works:
$this->db->where( "(`story_primary_genre` = " . $this->db->escape($genre) . " or `story_secondary_genre` = " . $this->db->escape($genre) . ")" );
Good luck.