は、すでに別の時間帯の一部である開始日です。 別のタイムスパンにある場合、タイムスパンの開始日は開始日よりも小さいか、終了日がより大きくなるか、またはequlになります。条件としては、start <= date AND finish >= date
と表されます。 この条件に一致する期間は、新しい期間と重複します。
MIN
とMAX
をあなたの試みで使用する際の問題は、そのようには考えられない時間間隔にギャップがある可能性があることです。
この条件をSQLクエリに追加できます。これは、すでに使用しているCodeigniter query
メソッドを使用するか、エスケープやその他すべての処理を処理するか、CodeIgniter QueryBuilder
メソッドを使用することで実行できます。 querybuilder使用
$maxDate = $this->db->query('SELECT * FROM tb_user WHERE start <= "' . $row->start . '" AND finish >= "' . $row->start . '"');
:クエリーメソッドを使用して
タイムスパンは、あなたの行の終了日のために同じことを確認する必要があります重複していないことを確認するために
$this->db->select(); // Giving no parameter is equal to SELECT *
$this->db->from('tb_user');
$this->db->where('start <=', $row->start); // $this->db->where('fieldname operator', value);
$this->db->where('finish >=', $row->start); // If you do not add an operator to the first parameter the operator will be = by default
$maxDate = $this->db->get();
をaswell :
クエリメソッドの使用:
$maxDate = $this->db->query('SELECT * FROM tb_user WHERE (start <= "' . $row->start . '" AND finish >= "' . $row->start . '") OR (start <= "' . $row->finish . '"AND finish >= "' . $row->finish . '")');
querybuilder使用:
$this->db->select(*);
$this->db->from('tb_user');
$this->db->where('start <=', $row->start);
$this->db->where('finish >=', $row->start);
$this->db->or_where('start <=', $row->finish);
$this->db->where('finish >=', $row->finish);
$maxDate = $this->db->get();
をAND
オペレータはOR
オペレータより強く、他の場所条項が存在しないため、この条件のみ、括弧なしで動作します。他のwhere節を追加する必要がある場合は、クエリビルダでparanethsisを追加する必要があります。最後のwhere
メソッドは、残りの構造とは別の構造を持っていると考えてください。クエリに閉じ括弧を追加する必要があるので、右に、したがって値の側に追加する必要があります。 querybuilderはまだ2番目のパラメータをエスケープしているため、閉じ括弧もエスケープします。 where
メソッドに1つのパラメータしか指定できないようにするには、エスケープされた値と閉じ括弧を含めます。
$this->db->select(*);
$this->db->from('tb_user');
$this->db->where('(start <=', $row->start);
$this->db->where('finish >= ', $row->start);
$this->db->or_where('start <=', $row->finish);
$this->db->where('finish >= "' . $row->finish . '")');
$maxDate = $this->db->get();
クエリは、衝突するすべての行を返します。したがって、このクエリの結果が空の場合にのみ、新しい日付を追加できます。これはnum_rows
メソッドで確認できます。
if ($maxDate->num_rows() > 0) {
echo '<label class="text-danger">booking</label>';
} else {
echo '<label class="text-success">empty</label>';
}