仅当低于 100 时才增加列值

Posted

技术标签:

【中文标题】仅当低于 100 时才增加列值【英文标题】:Increase column value ONLY if below 100 【发布时间】:2013-03-11 18:41:31 【问题描述】:

好的,我有一个问题,如果不先选择数据并查看列是否低于 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 值是 100.. 所以如果它将使其等于或大于 100,我宁愿将其更新为 100。 无论如何,您可以在 mysql 语法中做到这一点吗?有什么功能吗?

现在我只是想我必须选择数据,看看数学是否会让它大于 100,如果是,只需输入 100,如果不是,然后做我上面的方程式。

【问题讨论】:

【参考方案1】:

您可以使用MySQL's LEAST function 完成此操作。不太熟悉 Codeigniter 的 DB 语法,但这里是纯 php 的想法:

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

【讨论】:

更新了我的答案,原来是说MIN,其实函数是LEAST【参考方案2】:

为什么不将它也添加到您的 WHERE 子句中?

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

【讨论】:

因为如果返回 false,它根本不会更新列,它将保持在 94,当我仍然希望它更新到 100 点时.. 如果它会走得更远超过100,我还想至少更新到100..不要保持在94。 这不会将 happiness 更新为 100,否则它会更新为 &gt; 100 啊,是的——那么正如@Madbreaks 所建议的,MIN 就是你想要的!

以上是关于仅当低于 100 时才增加列值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:仅当某个列值在过去 N 个月内出现 N 次时才保留行

重置前根据增加的列值选择最后一行?

在 postgresql 中增加列值

通过pig在hbase中增加列值命令

查找列值连续增加的行

表上每 N 条记录增加列值