0

我想要这样的东西:

+----------+------+-----+--------+
| image_id | good | bad | result |
+----------+------+-----+--------+
|        1 |   10 |   2 |      x |
+----------+------+-----+--------+
|        2 |    4 |   1 |      y |
+----------+------+-----+--------+

其中 x 和 y 自动计算为分别为 10 - 2 和 4 - 1。(好 - 坏)-尽可能避免负数-

如果值(好或坏)也发生变化,我希望这个值也发生变化。

+----------+------+-----+--------+
| image_id | good | bad | result |
+----------+------+-----+--------+
|        1 |   10 |   2 |      x |
+----------+------+-----+--------+
|        2 |    4 |   1 |      y |
+----------+------+-----+--------+

我可以在 php 中做到这一点,但有没有办法直接用 MYSQL 做到这一点?

4

4 回答 4

1

计算结果并返回不少于零,因此避免负数:

SELECT image_id, good, bad, GREATEST(good-bad, 0) AS result from `table`;
于 2013-08-26T14:20:39.107 回答
1

使用这个查询:

select image_id, good, bad, GREATEST(good-bad, 0) as 'result' from tbl

这将计算每一行的差异并返回结果(如果结果为负,则返回 0 = 在名为 result.result 的另一列中。

作为一般规则,尽量避免将完全基于同一张表的其他列的计算结果存储在列中,特别是如果计算像简单的差异一样微不足道。

于 2013-08-26T14:18:02.050 回答
0

你可以简单地写:

select image_id, good, bad, (good-bad) as result from mytable
于 2013-08-26T14:18:54.160 回答
0

你可以做的是有这个模式:

CREATE TABLE tbl (image_id INTEGER PRIMARY KEY, good INTEGER, bad INTEGER);
CREATE VIEW tbl_result AS SELECT image_id, good, bad, CAST(good AS INTEGER) - bad AS result FROM tbl;
于 2013-08-26T14:19:40.990 回答