1

背景は次のとおり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 のリスト、計算された行数、およびユーザー定義の変数を使用して、何かできると思いますか?
例:

  1. このリストを想定すると、SELECT * FROM object WHERE user IN ($thislist) AND state=1 ORDER BY date DESC
  2. ユーザーに依存するオブジェクト行ごとに(ここではmysqlで説明する方法がわかりません) 、ランク変数をuserposition(in cycle)+ usercountでインクリメントします
  3. 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 だけで解決策を見つけられる人はいますか?
前もって感謝します

4

1 に答える 1

0

何かのようなもの:

SELECT o.id, o.user, o.date, 1 AS state
FROM object o
INNER JOIN user ON u.id = o.user
WHERE o.state = 1 AND u.state = 1
GROUP BY o.user, o.date
ORDER BY o.user, o.date DESC

よくわかりませんが、正しく読めば、両方のテーブルの状態が「1」のレコードのみが必要ですよね? そして、最初にユーザーでソートし、次に日付デスクでソートしますか?

于 2012-11-20T15:13:04.967 に答える