0

ユーザーにカレンダーを表示するPHPページがあり、割り当てられるプロジェクトに一致する開始期間と終了期間を選択できます。

しかし、選択した期間にユーザーを割り当てる前に、既に割り当てられている場合はデータベースを調べる必要があります。

一部のプロジェクトのリソースの割り当てデータを格納するテーブルがあります。以下の表とコードをご覧ください。

SELECT * FROM ALLOCATION 
WHERE dt_starting >= STR_TO_DATE('2013-09-02', '%Y-%m-%d') 
AND dt_ending <= STR_TO_DATE('2013-09-06', '%Y-%m-%d') 
AND id_res = 1;

id_alloc id_pro id_res  dt_starting dt_ending
----------
1    1  1   2013-09-02  2013-09-06  
2    2  1   2013-09-03  2013-09-04  
----------

ただし、2013-09-05 から 2013-09-05 まで、または 2013-08-31 から 2013-09-03 までの日付期間を使用して検索しようとすると、すべてのフィールドで null が返されます。

申し訳ありませんが、評判ポイントがあまりないため、ここに画像を掲載できません。

確かに論理的な問題ですが、頭がおかしくなりそうです。

4

1 に答える 1

1

列の値の間に定数が必要な場合は、ロジックが逆になっていると思います。

SELECT *
FROM ALLOCATION
WHERE dt_starting <= STR_TO_DATE('2013-09-02', '%Y-%m-%d') AND
      dt_ending >= STR_TO_DATE('2013-09-06', '%Y-%m-%d') AND
      id_res = 1;

編集:

期間間の重複を探している場合、ロジックは、一方が他方が終了する前に開始し、最初が 2 番目の期間の後に終了するというものです。

SELECT *
FROM ALLOCATION
WHERE dt_starting <= STR_TO_DATE('2013-09-06', '%Y-%m-%d') AND
      dt_ending >= STR_TO_DATE('2013-09-02', '%Y-%m-%d') AND
      id_res = 1;
于 2013-09-07T15:56:33.153 に答える