- ベストアンサー
PHPで表示期間の指定がしたい
- PHPで表示期間の指定がしたいという質問に対して、PostgreSQLのデータベースの情報を表示するためのSQL文を修正する必要があります。現在のSQL文では、日付の演算が正しく行われていないためエラーが発生しています。具体的には、日付の加算を行う際に、データ型が一致していないためエラーが発生しています。これを解決するためには、適切なデータ型のキャストを行う必要があります。
- 修正後のSQL文は、日付の範囲指定を正確に行うために、TO_DATE関数を使用して日付のフォーマットを統一し、データ型をキャストします。具体的には、指定した年月を日付型に変換し、1か月後の日付を計算するために、TO_DATE関数と演算子を使用します。また、カテゴリー名を指定してデータを取得するために、WHERE句にカテゴリー名の条件を追加します。
- 修正後のSQL文では、指定したカテゴリー名のデータの中から、指定した年月の範囲に該当するデータを取得することができます。修正後のSQL文を実行する際には、データベースに接続してからSQL文を実行する必要があります。また、エラーチェックや結果の処理を行うために、適切な関数を使用することも重要です。修正後のSQL文を実行して正しくデータが取得できるか確認してみてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
PHP4用 $from = date('Ymd'); //今日の文字列 //1ヵ月後の文字列 $time = getdate(); $time['mon']++; if($time['mon'] > 12){ $time['year']++; $time['>mon'] = 1; } $to = sprintf('%04d%02d%02d', $time['year'], $time['mon'], $time['mday']); //SQL文の作成 $sql = "select ee,ti,na,ca from テーブル名 where ca = 'カテゴリー名'"; $sql .= " and ee>='$from' and ee<='$to'"; $sql .= " order by ee asc"; 月末日の考慮はしていないので1月30日の時、2月30日になってしまうけど一応このような感じで。
その他の回答 (2)
- koba-yu
- ベストアンサー率40% (4/10)
エラーについて、PHP5.2.Xではエラーにはなりません。 PHPのバージョンはいくつですか? 一ヶ月後にする $old->modify('- 1 month'); ↓ $old->modify('+ 1 month'); 10日後だったら $old->modify('+ 10 day');
お礼
koba-yu様、ご回答ありがとうございます。 一ヵ月後への変更の件、ありがとうございます。 今日「+」1ヶ月ということなんですね。 とても助かりました!本当にありがとうございます。 PHP5ではエラーが出ないとのこと、検証までしていただきありがとうございました。 PHPのバージョンは4.4.2です。 何度も申し訳ありませんが、よろしくお願いします。
- koba-yu
- ベストアンサー率40% (4/10)
eeが「20100811」の形式との事なので文字列型として$sqlの作成まで $now = new DateTime("now"); //今日 $old = new DateTime("now"); $old->modify('- 1 month'); //1ヶ月前 $sql = "select ee,ti,na,ca from テーブル名 where ca = 'カテゴリー名'"; $sql .= " and ee>='{$now->format('Ymd')}' and ee<='{$old->format('Ymd')}'"; $sql .= " order by ee asc"; 以上の感じで。
お礼
koba-yu様、こんにちは。 ご回答ありがとうございました。 御礼が遅くなり、申し訳ありませんでした。 さっそく修正をいたしましたところ、以下の1件のエラーが出てしまいました。 --------------------------------------------------------------- ▼表示されたエラー Parse error: syntax error, unexpected '(', expecting '}' in PHPのアドレス on line 105 ▼PHPの105行目の内容 $sql .= " and ee>='{$now->format('Ymd')}' and ee<='{$old->format('Ymd')}'"; --------------------------------------------------------------- 以上です。 お力添えをいただけましたら助かります。 また、1ヶ月前~今日が表示されるようにしてくださったと思うのですが、実は今回表示したいのは今日~1ヶ月後になります。 我侭を申し上げますが、できましたらそちらもご教示ください。 重ね重ねお願いばかりで申し訳ありません。 よろしくお願いいたします。
お礼
koba-yu様 ご回答ありがとうございました。 エラーも出ることなく、無事に表示できました! 情報足らずのわかりにくい質問だったにも関わらず、繰り返し最後まで教えてくださり、本当にありがとうございました。