teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

sample

2016/11/28 06:27

投稿

yambejp
yambejp

スコア117877

answer CHANGED
@@ -1,4 +1,28 @@
1
1
  カンマ区切りで保存するのはDBとしてはありえないと思いますが
2
2
  どうしてもそういう仕様がしたいというのであれば
3
3
  更新日時は定形長でしょうから101個おさまる領域を用意しておいて
4
- 投入後100個分になるよう更新すればよいでしょう
4
+ 投入後100個分になるよう更新すればよいでしょう
5
+
6
+ #修正
7
+ よくよく考えたら101個収まる領域は不要ですね
8
+ 100個になるとvarcharの範囲を超えるのでtextで処理します。
9
+ 確保する領域もtextなので無視してよいでしょう
10
+
11
+ 100個も例示できないのでとりあえず3個を上限とした場合
12
+ 日時の標準的なフォーマットを以下とすると
13
+ 2016-11-28 00:00:00・・・文字数=19、
14
+ これにセパレータをカンマとすると3個データ保持に必要なバイト数が
15
+ 20*3-1=59
16
+
17
+ 以下の例を参照してください
18
+ ```SQL
19
+ create table tbl(id int not null primary key,datetimes text(59));
20
+ insert into tbl values(1,(@a:='2016-11-28 00:00:00')) on duplicate key update datetimes=substring(concat(@a,',',datetimes),1,59);
21
+ insert into tbl values(1,(@a:='2016-11-28 01:00:00')) on duplicate key update datetimes=substring(concat(@a,',',datetimes),1,59);
22
+ insert into tbl values(1,(@a:='2016-11-28 02:00:00')) on duplicate key update datetimes=substring(concat(@a,',',datetimes),1,59);
23
+ insert into tbl values(1,(@a:='2016-11-28 03:00:00')) on duplicate key update datetimes=substring(concat(@a,',',datetimes),1,59);
24
+ insert into tbl values(1,(@a:='2016-11-28 04:00:00')) on duplicate key update datetimes=substring(concat(@a,',',datetimes),1,59);
25
+ ```
26
+
27
+ ちなみにtextに文字数制限はできませんのでsubstringを利用しています
28
+ 100個のデータを保持するならsubstringで指定するテキスト長は1999かな?