私は2つのテーブルを持っています:
user messages
+---------+ +----------------+
|id|credit| |id|user_id| ... |
+---------+ +----------------+
|01| 05 | |01| 01 | ... |
|02| 01 | |02| 01 | ... |
|03| 00 | |03| 01 | ... |
+---------+ |04| 02 | ... |
|05| 02 | ... |
|06| 03 | ... |
+----------------+
n =user.creditのメッセージからn 個のメッセージを選択する必要があります。次のようなクエリを実行したいクエリ:
SELECT *
FROM user u JOIN messages m ON u.id = m.user_id LIMIT u.credit
WHERE user in ...;
行 01、02、03、04 を返す必要がありますが、05、06 は返しません。
私は書くことができないことを知っていますLIMIT u.credit
が、その動作が必要であり、各ユーザーが持っているクレジットの値の関数でフェッチされるメッセージの数を制限します (ユーザー 01 は制限が 5、ユーザー 02 は制限が 1 など)。ユーザーごとに COUNT を実行してから SELECT を実行する必要がないように、すべてのメッセージを一度に取得したいと考えています。
InnoDB で MySQL を使用しています