回答編集履歴

1

sample

2019/05/21 03:46

投稿

yambejp
yambejp

スコア114883

test CHANGED
@@ -5,3 +5,111 @@
5
5
 
6
6
 
7
7
  とりあえずuser_idとdateにまたがった複合インデックスをつけるところから
8
+
9
+
10
+
11
+ # triggerのsample
12
+
13
+
14
+
15
+ ```SQL
16
+
17
+ CREATE TABLE `test_point_history` (
18
+
19
+ `id` int(11) NOT NULL,
20
+
21
+ `user_id` int(11) NOT NULL,
22
+
23
+ `point` int(11) NOT NULL,
24
+
25
+ `date` int(11) NOT NULL,
26
+
27
+ `expire_date` int(11) DEFAULT NULL
28
+
29
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
30
+
31
+
32
+
33
+ create table `last_point_get`(
34
+
35
+ `user_id` int primary key,
36
+
37
+ `date` int
38
+
39
+ );
40
+
41
+
42
+
43
+ drop trigger if exists trg_aft_insert;
44
+
45
+ delimiter //
46
+
47
+ create trigger trg_aft_insert_test_point_history after insert on test_point_history
48
+
49
+ for each row begin
50
+
51
+ insert last_point_get(`user_id`,`date`) values
52
+
53
+ (new.user_id,new.date) on duplicate key update `date`=values(`date`);
54
+
55
+ end
56
+
57
+ //
58
+
59
+ delimiter ;
60
+
61
+ ```
62
+
63
+ - データ投入
64
+
65
+ ```SQL
66
+
67
+ INSERT INTO `test_point_history` (`id`, `user_id`, `point`, `date`, `expire_date`) VALUES
68
+
69
+ (1, 1, 1320, 1519830000, NULL),
70
+
71
+ (2, 2, 387, 1522508400, NULL),
72
+
73
+ (3, 2, 1716, 1525100400, NULL),
74
+
75
+ (4, 1, 1717, 1527778800, NULL),
76
+
77
+ (5, 4, 1261, 1530370800, NULL),
78
+
79
+ (6, 1, 1304, 1533049200, NULL),
80
+
81
+ (7, 2, 1031, 1535727600, NULL),
82
+
83
+ (8, 3, 420, 1538319600, NULL),
84
+
85
+ (9, 4, 168, 1535727600, NULL),
86
+
87
+ (10, 1, 1859, 1540998000, NULL),
88
+
89
+ (11, 1, 1637, 1543590000, NULL),
90
+
91
+ (12, 1, 1125, 1551366000, NULL),
92
+
93
+ (13, 3, 219, 1551366000, NULL);
94
+
95
+ ```
96
+
97
+ - 結果
98
+
99
+ ```SQL
100
+
101
+ SELECT * FROM last_point_get;
102
+
103
+ ```
104
+
105
+ |user_id|date|
106
+
107
+ |:--:|:--:|
108
+
109
+ |1|1551366000|
110
+
111
+ |2|1535727600|
112
+
113
+ |3|1551366000|
114
+
115
+ |4|1535727600|