【问题标题】:boolean flag with multiple same records具有多个相同记录的布尔标志
【发布时间】:2012-09-13 20:50:12
【问题描述】:

从我的表中插入/更新布尔值的最佳解决方案是什么。

每周或每月可以更改point的数量,例如当前数据:

+----+----------+-----------+--------------+-------+--------+
| id | phone_id | tarrif_id | affiliate_id | point | active |
+----+----------+-----------+--------------+-------+--------+
|  2 |        6 |         2 |            3 |   7.3 |      0 |
|  3 |        6 |         2 |            3 |   8.5 |      0 |
|  4 |        6 |         2 |            3 |  12.5 |      0 |
|  5 |        6 |         2 |            3 |   3.5 |      1 |
|  6 |       20 |         2 |            3 |  10.5 |      1 |
+----+----------+-----------+--------------+-------+--------+

我将插入一条具有相同phone_idtarrif_idaffiliate_id 的新记录,并禁用其他记录active=0

新点更改,例如:

+----+----------+-----------+--------------+-------+--------+
| id | phone_id | tarrif_id | affiliate_id | point | active |
+----+----------+-----------+--------------+-------+--------+
|  2 |        6 |         2 |            3 |   7.3 |      0 |
|  3 |        6 |         2 |            3 |   8.5 |      0 |
|  4 |        6 |         2 |            3 |  12.5 |      0 |
|  5 |        6 |         2 |            3 |   3.5 |      0 |
|  6 |       20 |         2 |            3 |  10.5 |      0 |
|  7 |        6 |         2 |            3 |  20.2 |      1 |
|  8 |       20 |         2 |            3 |  33.7 |      1 |
+----+----------+-----------+--------------+-------+--------+

【问题讨论】:

  • 本次更新后的结果集应该是什么样子,能否发个示例?
  • @MahmoudGamal 完成,查看更新。
  • 如果所有列的值都相同会发生什么情况(例如,您为phone_id、tarrif_id 和affiliate_id 插入一个已经存在的点值)?
  • 这个问题听起来很直接,我想知道是什么阻碍了你去做。能详细点吗?
  • @hakra 你的意思是所有列都相同,包括点值?好吧,我可以再次插入现在的行...但是我可以为历史记录添加“AddedDate”字段。您怎么看?除了使用布尔标志之外,还有其他方法吗?

标签: mysql database boolean


【解决方案1】:

你可以这样做:

-- 1. Disable other records
UPDATE point SET active = 0;

-- 2. Insert new rows
INSERT INTO point (phone_id, tarrif_id, affiliate_id, point, active)
SELECT phone_id, tarrif_id, affiliate_id, /* Your computation here */, 1
FROM point
GROUP BY phone_id, tarrif_id, affiliate_id
WHERE active = 0;

您仍然需要知道如何计算新的 point 值(在您的示例中为 20.2 和 33.7)。

【讨论】:

  • 这将在执行第二、第三、...时间时插入多个重复行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多