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


※MySQL

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

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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/05/08 13:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント34pt

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

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

id:sunn18 No.2

回答回数1ベストアンサー獲得回数0

ポイント33pt

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

id:tokb No.3

回答回数2ベストアンサー獲得回数1

ポイント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でないですけどたぶん適当に変えれば大丈夫でしょう。

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

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

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

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

回答リクエストを送信したユーザーはいません