![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
開始日と終了日が設定されているデータの扱いについて教えてください。
すでに複数登録されているデータには、開始日と終了日というフィールドが登録されています。
→ "開始日","終了日","箱1","箱2"
→ "051101","051130","a1","a2"
→ "051201","051231","b1","b2"
新しいデータを追加する際、すでに登録された期間に被っていた場合はエラー表示させたいのですが、そのやり方がわかりません。
(※12月1日~12月31日までというデータがすでに登録されていた場合、
11月1日~12月15日というデータは登録できない、という感じです)
とりあえず下記のようにやったりしているのですが、
どうも思ったように動いてくれません
また、SELECTを使うものなのか疑問に思っています。
$start_date = "2005-12-01"
$end_date = "2005-12-31"
$hoge = "SELECT * FROM table_name WHERE
( date_start<='"$start_data"' AND date_end>='"$start_data"' ) OR
( date_start<='"$end_data"' AND date_end>='"$end_data"')";
$db_query = sql_query($hoge,$ID);
$array_result = mysql_fetch_array($db_query);
if(empty($date_start_check) != TRUE ){
die("この期間内のデータはすでに登録されています。");
}
何卒、良いやり方を教えてくださいm(_ _)mペコリ
No.3ベストアンサー
- 回答日時:
>( date_start<='"$start_data"' AND date_end>='"$start_data"' ) OR
>( date_start<='"$end_data"' AND date_end>='"$end_data"')";
この式だと、追加するデータの期間に収まってしまうデータがすり抜けます。
(たとえば、12月2日~12月30日までというデータがすでに登録されていた場合でも、 12月1日~12月31日というデータが登録できます)
あと気になったのは
>if(empty($date_start_check) != TRUE )
ここでいきなり $date_start_check というのが出てきてますが 実際のプログラムでは $array_result となってるのをタイプミスをしたのでなければ、実行は出来ますがSQLに関係なくif文は成立しません。
$hoge = "SELECT date_end, date_start FROM table_name WHERE date_end>='$start_date' AND date_start<= '$end_dated'";
$db_query = mysql_query($hoge,$ID);
if( mysql_num_rows($db_query) ){ die("この期間内のデータはすでに登録されています。"); }
とりあえずこんな感じで動くと思います。
No.2
- 回答日時:
後者については、普通のキーならばduplicateエラーとか
ありますが、こういう期間の場合の手は知りません。
ベテランなら良い手を知っているかもしれません。
現在、期間が重なって登録できるとの事ですが、基本的な式は
どうみても間違ってないので、コーディングに何か問題が
あるように思えます。それを確認するには、プログラムを
コピー&ペーストしてもらえば判るかもしれません。
確認するに
No.1
- 回答日時:
ここに書いたとおりのコーディングでしょうか?
だとすると、基本的な考えは良いのですが、ミスがありますね。
まず日付のデータですが、データベースの中身は yymmdd の
形式で、プログラム中で代入しているのは、yyyy-mm-dd に
なってますね。合わせましょう。
次に変数名です。値を代入するときは $start_date ですが、
SQL文中は$start_dataで、eとaが違ってます。endのほうも
同じです。
まず、そこを確認しましょう。
この回答への補足
すみません。
上記、記載しているものは書き込み用に編集したときにタイプミスしたもので、実際は通常に動いています。
しかし、SQL文の条件部分がやりたいことを満たしてないので、期間が重なっても登録できてしまいます。
また、上記ではSELECT文で読み出した後に、mysql_fetch_arrayを使って配列として取得した後、取得できたならエラーというの作業をしていますが、クリエ実行段階でデータがあればFALSEを返すみたいなものがあれば、そこでエラーを出せる気がしたので、他にそのようなやり方があれば教えてくださいm(_ _)mペコリ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Visual Basic(VBA) シートを選択して、1つのPDFにしたいのですが。 5 2022/10/03 20:18
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) エクセルで勤務時間の計算をしています。 下記図でstartは勤務開始時間、endは勤務終了時間です。 5 2022/06/07 13:51
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PostgreSQLのtimestamp型で時間...
-
Access にて "mm:ss.0" 形式の ...
-
Excelの外部参照と書式設定につ...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
【SQL】他テーブルに含まれる値...
-
joinの場合のテーブル名の別名...
-
sqlに記述できない文字
-
SELECTした結果に行番号を求めたい
-
集計でテストの各教科の最高得...
-
既存データをINSERT文にして出...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
-
truncate tableを使って複数の...
-
IDとパスワードについて。
-
Accessで今日から5日後
-
パススルークエリ&ACCESSテーブ...
-
既にテーブルが存在する場合の...
-
データ削除とSQL*Loaderでのイ...
-
2つのテーブルをLIKE演算子のよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PostgreSQLのtimestamp型で時間...
-
絶対参照と相対参照の違いを教...
-
Access にて "mm:ss.0" 形式の ...
-
予約システムでの時間の設計に...
-
SELECT の仕方 (今月のデー...
-
該当レコードなしでエラーを発...
-
ご覧ください、ご参照ください...
-
開始日と終了日が設定されてい...
-
MySQLで期間のUNIQUEってできま...
-
SQL 文 日付範囲を指定したレコ...
-
MS_ACCESSでINSTR関数を使いたい。
-
参照数とはなんですか?
-
アクセス2010他テーブルを参照...
-
重複データより一番古いデータ...
-
グループ単位での表示?
-
Excelの外部参照と書式設定につ...
-
SQL文の書き方
-
月報からいろいろ集計したい
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
おすすめ情報