2016-10-30 4 views
-1

TIMESTAMPDIFFTIMESTAMPDIFF - 私は特定の上で同じことを行う必要がありますどのように日付値

上記のリンクの間の差を計算するためにPHP/MySQLの中でそれを使用するが、二つの日付の差を計算する方法を私を助けてきた、実行時にPHP内のMySQL selectクエリを使用して列を取得します。例えば

Profileテーブル:MySQLのコンソールからクエリを次

  • 名前
  • 性別
  • DOB(生年月日)

ランニング、正確に提供します必要な結果:

SELECT TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS Age FROM profile; 

はしかし、私は私のDOB値のセット全体に他の条件と組み合わせて同じ結果を得るために、次のクエリを完了する必要があります。私はサブクエリだけに起因するもの、文句を言わない仕事をチェックし

SELECT * FROM Profile WHERE Gender='$gn'; 

複数の戻り値。

+0

'profile'は' Profile'と同じテーブルですか?次に、最初のクエリの計算された列を2番目のクエリのフィールドリストに追加するだけです。 – akrys

+0

彼らは同じです。あなたが紹介したように私のためにその質問を書くことができますか?それは参考になります。 – Kam

答えて

0

あなたが言ったように、それはあなたがこのクエリを使用することができ、同じテーブルです:

SELECT *,TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS Age 
FROM Profile 
WHERE Gender='$gn'; 

次に、あなたがあなたの結果セットに追加フィールドageを見つけることができます。

+0

このクエリは機能しますが、AgeをWHERE句の一部として使用すると、MySQLはAge as Unknownカラムを報告します。 #1054 - 'where句'の 'Age'列が不明です。 **このクエリに基づいて結果を達成しようとしています... SELECT *、TIMESTAMPDIFF(YEAR、DOB、CURDATE())AS Age FROM Profile gender = "Male" AND(Age BETWEEN 20 AND 30); * * – Kam

+0

これは、選択された後にこのフィールドの名前が付けられたためです。 MySQLがwhere-statmentsをフィルタリングするとき、この列はまだ作成されていません。この場合、代わりにhaving節を追加する必要があります。これは、選択が完了した後に実行されます。これを試してみてください: 'SELECT *、TIMESTAMPDIFF(YEAR、DOB、CURDATE())AS年齢FROMプロファイルgender =" Male "where(age BETWEEN 20 AND 30); ' – akrys

+0

必要に応じて動作します。 – Kam

関連する問題