質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

3378閲覧

Mysqlを使いDM等の送信履歴を管理する方法

mitsu326

総合スコア23

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/09/17 10:23

現在、登録者向けのDM送信履歴を、Mysqlを使い管理したいと考えております。

送信先のアドレスを管理するマスターテーブルがありますが、DMの重複送信を回避するためにも
履歴を残したいと考えております。

どのようなテーブル構造にするのが、管理しやすいのか分かりませんので教えてください。

・マスターテーブル (簡略)
user_no : 送信先のコードNo
mail_add : メールの送信先
name : 受信者の名前

・送信履歴テーブル
submit_mail_no と言う名前のテーブルを、例えばメール送信毎に作成し中に、
user_no を保存。

上記のようなテーブルを送信毎に作成して管理を行なうのでしょうか?
メールを100通送信すると100個のテーブルが作られる事になるかと思うのですが
そう言うものなのでしょうか?

上記の様な保存の方法しか思い当たらず、正しいのか判断ができませんので
アドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

たぶんmitsu326さんはまだテーブルのリレーションを理解されていないのでしょう。
一般的にこういうのは、送信履歴テーブルにuser_noカラムを持たせユーザマスタテーブルとのリレーションを設定します。
たとえば、以下のように送信履歴テーブルを定義します。

送信履歴テーブル
id autoincrement primary key
user_no
send_date

で、メールを送信するたびに送信履歴テーブルにレコードをinsertすると。
運用上問題なけば、送信履歴テーブルのuser_noにユーザマスタuser_noの外部キーを設定すると、なお良いです。

投稿2017/09/17 11:18

ooeok

総合スコア469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsu326

2017/09/17 11:47

早速のご回答ありがとう御座います。 Mysqlの扱いがここ最近のため勉強しております。 的を得てない質問になるかもしれませんが・・・ ご回答頂きました送信履歴のテーブルの user_no は、user_no 毎にカラムとして作成していくのでしょうか? 送信履歴テーブル id autoincrement primary key user_no100001 user_no100002    ・    ・    ・ send_date 若しくは、100001,100002,100003,100004・・・の様に区切り文字で user_no に保存するのでしょうか? ここが良く理解出来てないと思うのですが、ご回答お願いします。
ooeok

2017/09/17 12:00

すでにtanatさんが回答されていますが、私も一応。 増やすのはカラムではなくレコードです。 送信履歴テーブルの名前をhistoryとすると、 INSERT INTO history (user_no, send_date) VALUES (100001, '2017-09-17 15:00:00'); こんな感じでinsetしていけばよいでしょう。
mitsu326

2017/09/17 12:32

ooeokさんありがとう御座います。 やっと理解できました♪ さらに勉強して完成させて行きます。 本当にありがとう御座いました。
guest

0

ベストアンサー

上記のようなテーブルを送信毎に作成して管理を行なうのでしょうか?
メールを100通送信すると100個のテーブルが作られる事になるかと思うのですが
そう言うものなのでしょうか?

そういうものではありません。
上記のようなテーブルがあるのであれば、
送信の度に送信履歴テーブルに送信履歴レコードを追加する。
(100通送るなら、100レコードが追加される)
というのが一般的な形ですね。

投稿2017/09/17 10:46

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsu326

2017/09/17 11:30 編集

早速のご回答ありがとう御座います。 やはりレコードを追加するのが正しいのですね。 ここで問題なのですが、レコードを追加するにあたり、送信歴として user_code を保存すると 思うのですが、カンマ区切りとかのデータとして保存するのでしょうか? 例えばテーブルの中身なのですが・・・ submit_mail_no | user_code_all 100001       | 100001,100002,100003,100004・・・ の様にするのか submit_mail_no  | 100001 | 100002 | 100003  |  10000 4|・・・・ 100001       |     1 |     1 |    1  |     1|・・・ の様にするのか? 若しくは、まったく違う方法のレコードの保存なのでしょうか? 宜しくお願いします。
tanat

2017/09/17 11:57

まずは、 RDBMSのイメージというか概念部分を入門サイトや書籍で学習されるのがいいと思います。 (学習といっても1時間もかからない、一番最初の部分です) イメージとしては、例えばエクセルに例えると データベース=エクセルのファイル(ブック) テーブル=シート フィールド=カラム レコード=行 というようなイメージです。 今回のケースだと、送信履歴が増えたら、エクセルでは行を追加するようなケースです。 送信履歴のテーブルを submit_history として フィールドをそれぞれ DM番号をmail_no 会員IDをuser_no とします。 この場合、 DM番号1を会員ID1の人に送信したら mail_no = 1 user_no = 1 のレコードをインサートします。 DM番号1を会員ID2の人に送信したら mail_no = 1 user_no = 2 DM番号2を会員ID1の人に送信したら mail_no = 2 user_no = 1 という感じでそれぞれレコードを送信して、 会員ID1の人にDB番号2って送ったことあったっけ? とチェックしたい場合は submit_historyテーブルからmail_no=1でかつuser_no=1のデータが存在するかを確認する という流れになります。
mitsu326

2017/09/17 12:23

tanatさん・・・分かりやすいご回答ありがとう御座います。 という事は・・・ mail_no のカラムへ 送信したメールのNo(とりあえず今回は1)を入れ user_no へ 会員コードなどの判別がつくものをセットと 上記の事より DMを送信した件数を例えば1000件とすると、 submit_historyテーブルへ1000レコード追加 さらに送信した場合は 1000レコード追加 合計2000レコードとなる。 mail_no は送信したユーザー数分重複して良いと言うことで宜しいでしょうか? これで合っていれば、理解できました♪ 違ってますでしょうか?
tanat

2017/09/17 12:28

はい、そういう理解で間違いありません!
mitsu326

2017/09/17 12:34

最後までありがとう御座いました。
guest

0

履歴については、(履歴対象データのキー,日時)をキー構成としたテーブルを用意するのが一般的です。
※日時の部分を連番とする場合もありますが、その連番も殆ど時系列的なものが多い。

今回のDM送信の履歴ということであれば、「どのような内容のDMを、誰に、何時」送信したかを記録すれば良いと思われます。

一般的な構成に合わせた説明をすると、履歴対象データのキーについては、
・DMのイベントを管理しているものがあればそのデータのキー
・ユーザーマスターのキー
の両項目、
日時については、どのような単位で管理するかにより、日付にするか日時までにするかは変わります。
不達による再送まで管理するなら日時でしょうし、同一日での送信は日で纏めるというなら日付になります。

投稿2017/09/17 12:08

sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsu326

2017/09/17 12:29

saziさんへ 詳しくご回答頂きましてありがとう御座います。 履歴保存する際に、DM送信No に対して 送信したユーザーNo を対にしてレコードを 登録する際に、DM送信Noが送信したユーザー数分重複すると言うのがNGと勝手に 思っていたのが、そもそもの間違いでした。 やっと理解できました! 本当にありがとう御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問