私は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の重要度も少し高いとします。
何か案は?
よろしくお願いします!