1462076498 データベースの設計に関してアイデアをお願いします。


※MySQL

今、メールを送信するプログラムを作成しています。

登録された送り先から順番に1通1通送信しています。

質問文が長くなりましたので、
http://webtomake.hatenablog.com/entry/2016/05/01/132025
を御覧ください。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2016/05/01 13:21:38
  • 終了:2016/05/08 13:25:03

回答(3件)

id:pogpi No.1

pogpi回答回数357ベストアンサー獲得回数462016/05/01 14:52:42

ポイント34pt

同一ユーザーの連続した処理を回避したければ、各ユーザーで一件ずつ取得すればいいですね。

MIN(No)をGROUP BY useridでSELECTして、WHEREをHAVINGにすればできそうですね。

id:sunn18 No.2

sunn回答回数1ベストアンサー獲得回数02016/05/02 12:58:17

ポイント33pt

同一ID内のdoneを除くレコード内で、Noによるランクが得られたら、そのランクでソートして処理をすれば、3件ごとではなく1件ごとになるけど、そのほうがユーザ毎で均等に処理できるんじゃないか?
(MySQLでRANKを行うのがちょっと面倒だけど)

id:tokb No.3

tokb回答回数1ベストアンサー獲得回数02016/05/02 21:25:13

ポイント33pt

少し問題を単純化して、同じユーザーについて「3つ以上を後に回す」ではなく「3つまでしかとらない」とします。問題の性格上ジョブが増えたら繰り返し実行しなければなりませんから、このようにしても意味は損なわれないと思います。

そうするとこのように書けると思います。

sqlite> select no as no2, user as user2 from tbl where (select count(no) from tbl where user = user2 and no < no2) < 3;
1|okajima
2|yoshida
3|yoshida
4|yoshida
8|okajima
10|okajima

この例はMySQLでないですけどたぶん適当に変えれば大丈夫でしょう。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません