1

私はORDERBYCASEまたはORDERBYIF()を使用したことがなく、インターネットで見つけたいくつかの例は、次のタスクを実行しようとするよりも混乱を招きます。

メンバーリストがあり、このメンバーリストの上位(一番上)にユーザーを並べて、ユーザーのアクティビティに少し「報酬」を与えたいと思います。

私の例では、3つの列を持つ「users」というMySQLテーブルがあります。

  user_percentage     |     user_photo     |     user_lastlogin
    ----------------------------------------------------------
        12                      1                  1356389646
        42                      1                  1456549641
        37                      0                  1776389443
        84                      1                  1356535535
        56                      0                  1868689646
        66                      0                  1811189622
        71                      1                  1656779645
  • 「user_percentage」は、各ユーザーがプロファイルフィールドに入力したすべての値(0〜100)を保持します。
  • ユーザーがプロフィール写真をアップロードした場合、「user_photo」は値(0 = false、1 = true)を保持します。
  • "user_lastloginは、最後の訪問の値(タイムスタンプ)を保持します。

説明するのは少し難しいですが、私が望むことを簡単に言うと:

  • user_percentageの値が高いユーザーはメンバーリストの一番上にあるはずですが、user_photoを取得していない場合は、古いuser_lastloginタイムスタンプを取得した場合と同じように、メンバーリストで「下に移動」する必要があります。メンバーの順序でダウン。

  • また、私が防ごうとしているのは、ユーザーがサインアップし、すべてのプロファイルフィールドに入力し(その後、user_percentage値は= 100になります)、写真をアップロードしました(その後、user_photoは= 1になります)が、それ以降はログインしていません。長い間(彼は非常に古いuser_lastlogin =タイムスタンプを持っているので)、このユーザーをメンバーリストの順序で下に移動させたいと思います。

私の質問は:これは1つのMySQL ORDER BYステートメントでどういうわけか可能ですか?

user_photoの重要度が30%であるのに対し、user_lastloginの重要度が高く、user_percentageの重要度も少し高いとします。

何か案は?

よろしくお願いします!

4

1 に答える 1

0

SQL を書き始める前に、各パラメーターの価値を明確にする必要があります。

例のリストを作成し、次のような単純な計算に変換する必要があります。

(photo*timesincelogin*20)+(percentage)

または、それぞれに計算がある CASE ベースのステートメント - すなわち:

写真のあるすべての人 THEN 写真のないすべての人、サブソートtime*percentage.

手を振る「少し下に移動」は、SQL コマンドでの回答には十分に具体的ではありません。

于 2012-12-25T01:58:58.790 に答える