2016-10-21 4 views
-2

日付範囲内の値を抽出し、他の値でグループ化する必要があります。PHPとMysqlを使用して日付範囲内のデータベースから値を取得する方法

入力はdate=2016-10-21です。日付範囲(date_fromとdate_to)の間にすべてのデータを取得する必要があります。値はsubcat_idでグループ化され、空のdate_fromまたはdate_toフィールドを持つ行は無視する必要があります。

コメントから判断する
$date='2016-10-21'; 
$sql="select * from db_details where date_from>='".$date."' and date_to <= '".$date."' group by subcat_id "; 

id subcat_id subcat_name  date_from   date_to  
1   62   ddd   2016-10-22   2016-10-26  
2   62   ddd   2016-10-22   2016-10-26  
3   62   ddd            
4   63   sss   2016-10-18   2016-10-21  
5   63   sss   2016-10-18   2016-10-21  
6   64   fff   2016-10-20   2016-10-25 
+0

だから、あなたは何を試してみました

あなたは何かのようにしたいですか? – RiggsFolly

+0

select * from table where date_from> = 'date'とdate_to <= 'date 2' –

+0

select * from date_from $ date1と$ date2の間 – mhmd

答えて

0

、あなたの問題はあなたのクエリです:(。.date)を、あなたはcancatする必要が

select * from db_details where date_from>='".date."' and date_to <= '".date."' group by subcat_id 

まずいけないクエリでは、単純に差し込みます$variableが動作します。

第2に、実際には何もクエリにプラグインしていません。あなたが持っている場合は、提案として

select * from db_details where date_from>=$date_from and date_to <= $date_to group by subcat_id 

、あなたはおそらくmysqliのにアップグレードする必要があり、または:あなたは、文字通り、.date.

あなたのクエリは次のようになります単語.date.と単語間のすべてが探していますあなたはnamed placeholders

+0

私の更新された投稿を確認してください。ここでは、指定された入力日付を使用してすべての値を取得する必要があります。その日付は日付範囲の間にあるはずです。 – subhra

+0

あなたは私の投稿を読んでいませんでした。 –

1

あなたのロジックが間違って使用する必要があります。

SELECT * FROM db_details WHERE date_from >= :date AND date_to <= :date GROUP BY subcat_id 

これはとして読み取ります。指定します日付はの前により、の後はの最新です。開始日が常に最新の日付より前である場合、これは不可能な条件です。これは決してすべての行に一致しません。

SELECT * FROM db_details WHERE date_from <= :date AND date_to >= :date GROUP BY subcat_id 

か::

SELECT * FROM db_details WHERE :date BETWEEN date_from AND date_to GROUP BY subcat_id 
+0

date_fromとdate_toの値がブランクの場合は無視してください。 – subhra

+0

@subhraそのために条件を追加してください。 – jeroen

+0

私はこの '$ date = '2016-10-21''のような値を持っています。私はこれを 'date_from <=:date AND date_to> =:date'のように入れていますが、来ていません。 – subhra

関連する問題