※MySQL
今、メールを送信するプログラムを作成しています。
登録された送り先から順番に1通1通送信しています。
質問文が長くなりましたので、
http://webtomake.hatenablog.com/entry/2016/05/01/132025
を御覧ください。
同一ユーザーの連続した処理を回避したければ、各ユーザーで一件ずつ取得すればいいですね。
MIN(No)をGROUP BY useridでSELECTして、WHEREをHAVINGにすればできそうですね。
同一ID内のdoneを除くレコード内で、Noによるランクが得られたら、そのランクでソートして処理をすれば、3件ごとではなく1件ごとになるけど、そのほうがユーザ毎で均等に処理できるんじゃないか?
(MySQLでRANKを行うのがちょっと面倒だけど)
少し問題を単純化して、同じユーザーについて「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でないですけどたぶん適当に変えれば大丈夫でしょう。
コメント(0件)