背景は次のとおりobject
です。次を含むテーブルがあります。
- ID
- ユーザー (ユーザーテーブルの ID)
- 日付(日付)
- 状態 (0|1)
そして、次を含む別のテーブルuser
:
- ID
- 状態 (0|1)
元。:
Object
ID | USER | DATE | STATE
1 1 2012-10-01 1
2 2 2012-08-01 1
3 3 2012-10-01 1
4 3 2012-10-02 1
5 3 2012-09-01 1
6 3 2012-10-01 1
7 1 2012-10-02 1
8 2 2012-10-02 0
9 2 2012-10-02 1
10 1 2012-10-01 1
11 2 2012-10-01 1
12 3 2012-10-01 0
13 4 2012-11-11 1
Users
ID | STATE
1 | 1
2 | 1
3 | 1
4 | 0
オブジェクトの状態がアクティブな場合は、有効な状態のユーザーごとに 1 つのオブジェクトを周期的に表示するように要求します。
元。結果 :
ID | USER | DATE | STATE
10 1 2012-11-01 1
9 2 2012-10-02 1
4 3 2012-10-02 1
7 1 2012-10-02 1
11 2 2012-10-01 1
3 3 2012-10-01 1
1 1 2012-10-01 1
2 2 2012-08-01 1
6 3 2012-10-01 1
5 3 2012-09-01 1
簡単なクエリを実行できますが、ここでの実行方法がわからないことを認めます。
EDIT 2012-11-22 : 別のアプローチを試してみましょう... このクエリ (Michiel van Vaardegem に感謝) を使用すると、必要な順序でユーザーのリストを取得できます... 鮮度オブジェクトが一番上にあるユーザー。
SELECT o.user
FROM object o
INNER JOIN users ON user.id = o.user
WHERE o.state=1 AND users.state=1
GROUP BY o.user
ORDER BY o.date DESC
結果は次のとおりです。
USER
1
2
3
新しい質問のアプローチ : この ID のリスト、計算された行数、およびユーザー定義の変数を使用して、何かできると思いますか?
例:
- このリストを想定すると、SELECT * FROM object WHERE user IN ($thislist) AND state=1 ORDER BY date DESC
- ユーザーに依存するオブジェクト行ごとに(ここではmysqlで説明する方法がわかりません)
、ランク変数をuserposition(in cycle)+ usercountでインクリメントします
- ORDER BY rank LIMIT n,xその結果
次のように、ユーザーサイクルでオブジェクトをランク付けしたい:
object from user 1,2,3,1,2,3,1,3,3,1,1,1,1,1,1,1,1,etc... if exist
この新しいアプローチアルゴリズムは mysql クエリで実現できますか? 可能であればどのように...それは大きな問題ですか?
MySQL だけで解決策を見つけられる人はいますか?
前もって感謝します