0

データベース テーブル userinfo があります。その userinfo テーブルには、フィールド user_id、user_name、user_birth があります。

私の目標は、ユーザーの次の誕生日を取得することです。私の場合、次の 6 つです。同じ種類の例を見つけましたが、それらはすべて DATE-dbformat を使用しており、テーブルでは user_birth 値が UNIX タイムスタンプ形式であるため、これらの例は機能しません。

誰かがそれをどのように作成できるかのサンプルコードを持っていれば幸いです。

私が得ようとした結果は次のようになります(今日が23.06の場合):

  • 27.06 マイク
  • 11.10 スティーブ
  • 23.10 ジョン
  • 25.12 デイブ
  • 07.01 アンディ
  • 12.02 マーク

これらは、23.06 以降の次の 6 回の誕生日であり、年は関係ありません。

前もって感謝します。

4

1 に答える 1

1

さて、from_unixtimestamp()日付/時刻形式で取得するために使用します。したがって、クエリは次のようになります。

select *
from t
order by (case when month(date(from_unixtimestamp(user_birth))) = month(now()) and
                    day(date(from_unixtimestamp(user_birth))) > day(now()) or
                    month(date(from_unixtimestamp(user_birth))) > month(now())
               then 1 else 0
          end) desc,
         month(date(from_unixtimestamp(user_birth))),
         day(date(from_unixtimestamp(user_birth)))
limit 6

プットの最初の部分は、最初order byの年の後の日付です。次に、日付が月と日で並べ替えられます。

于 2013-06-23T18:04:26.817 に答える