2013-03-11 62 views
0

確定我有未首先選擇數據,看是否該列是低於100 ..但反正可能是不可能的問題。我希望有一個更簡單的方法來做到這一點,所以我不必運行兩個查詢。 我只想更新列,如果它小於100 +無論我添加。增加列值僅當低於100

我使用CI:

$this->db->set('happiness', 'happiness + '.$amt['happiness'], FALSE); 
$this->db->set('loyalty', 'loyalty + '.$amt['loyalty'], FALSE); 
$this->db->set('hunger', 'hunger + '.$amt['hunger'], FALSE); 
$this->db->where('id', $creature); 
$this->db->update('user_creature'); 

的事情是是,有時幸福可能已經在94和我加入9 ..這將使103 ..但MAX值I希望能夠把它在100 ..所以,如果它要使其等於或大於100,我寧願只是將其更新到100 有反正你可以做,在MySQL語法?任何功能?

現在我只是在想我必須選擇數據,看看數學將使大於100,如果是的話,只需要輸入100,如果不是,那麼做我的公式我在那裏。

回答

2

你可以用MySQL's LEAST function做到這一點。不太熟悉CodeIgniter的數據庫語法,但這裏的想法在普通的PHP:

$sql = " 
    UPDATE user_creature 
    SET happiness = LEAST(100, happiness + $amt[hunger]) 
    WHERE id = $creature 
"; 
+0

更新了我的答案,最初說'MIN',但功能實際上是'最少'。 – Madbreaks 2013-03-11 18:56:32

+0

Genius =)謝謝! – Peanut 2013-03-11 19:03:55

0

爲什麼不把它添加到您的WHERE子句也?

WHERE (happiness + {$amt['happiness']}) <= 100 
+0

因爲那樣的話,如果返回false,則不會更新所有的列,它會停留在94,當我還是想它會更新到100點..如果它會遠離100,我仍然至少將它更新到100 ..不保留它在94. – Peanut 2013-03-11 18:47:05

+0

這將不會更新'幸福'爲100,否則更新爲'> 100'。 – Madbreaks 2013-03-11 18:47:23

+0

啊是的 - 那麼作爲@Madbreaks建議,'MIN'是你想要的! – Martin 2013-03-11 18:52:43