2012-09-21 31 views
0

从我的表插入/更新布尔值的最佳解决方案是什么?具有多个相同记录的布尔标志

每周或每月

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 | 
+----+----------+-----------+--------------+-------+--------+ 
+0

此更新后结果集应该是什么样子,请您发布样本? –

+0

@MahmoudGamal完成,请参阅更新。 –

+0

如果所有列的值相同(例如,您插入的phone_id,tarrif_id和affiliate_id已存在的点值)会发生什么? – hakre

回答

0

你可以这样做:

-- 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 )。

+0

这将在执行第二,第三,...次时插入多个重复行。 – DCoder

+0

你是对的,回答编辑。 –

相关问题