ここから本文です

特定の日時での最年少者を算出する □employeeテーブル id|last_name|birth...

m13********さん

2018/2/2710:00:44

特定の日時での最年少者を算出する

□employeeテーブル

id|last_name|birth|
01|山田|1999-10-31
02|柏木|1995-05-11

03|立花|1997-02-21
04|東郷|1999-07-08

特定の日時での最年少者を算出したいと考えています。変わるのはパラメーターから受け取る年($year)だけで、月日は現在の月日を取得させています。
SQL文は下記のようにしたのですが、diff/diff_year/diff_daysが全てNULLになってしまいます。

SELECT *,datediff('".$year." - month(now()) - day(now())',birth) diff, DATE_FORMAT(FROM_DAYS(datediff('".$year." - month(now()) - day(now())',birth)), '%y') AS diff_year, DAYOFYEAR(FROM_DAYS(datediff('".$year." - month(now()) - day(now())',birth))) AS diff_days FROM employee ORDER BY birth DESC LIMIT 1

どこを修正すれば、正常に算出できるようになるでしょうか?
ご存知の方いらっしゃいましたら、ご教示ください。
よろしくお願いします。

補足「ORDER BY birth DESC」で最年少者の算出自体はできているのですが、○○歳××日と表示させる為に「diff/diff_year/diff_days」の値を出したいです。

閲覧数:
13
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shi********さん

2018/2/2711:16:21

>datediff('".$year." - month(now()) - day(now())',birth)

文字列の連結をしたいのであれば、ちゃんとconcatを使ってください

https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#funct...

datediff(concat(".$year.",'-',month(now()),'-',day(now())),birth)



変数$yaerとMySQL側の月・日を組み合わせていますが、月・日がMySQL側でないといけない理由はありませんよね?プログラム側で$date($yaerとプログラム側の月・日を組み合わせる)として生成した方が格段に楽だと思います。

$date = $year . '-' . date('m-d');



(蛇足)
最年少者を算出するだけなら、birthで降順に取得すればいいだけじゃないのですかね?(birthが指定された年月日より後になるものは除外)

質問した人からのコメント

2018/2/27 11:34:15

回答ありがとうございます。
最初にプログラム側の年月日を代入する方法を試したら、無事に年齢まで取得することができました。
ありがとうございました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる