この2つのクエリがあります。私の最初の質問は、材料の入手可能性を確認することです。これは、私が現在直面している主な問題でもあります。一度に予約されているすべての資料を選択します。したがって、私はこのテーブルの日付を schedule_dummy テーブルに持っています: 注: 私は codeigniter を使用しています。
CREATE TABLE schedule_dummy
(
`materialID` int,
`date_reserve` date,
`start_time` time,
`end_time` time
);
------DB Table schedule_dummy --------
materialID | date_reserve | start_time | end_time
----------------------------------------------------------
7 | 2013-08-31 | 13:00:00 | 13:30:00
8 | 2013-08-31 | 13:00:00 | 14:00:00
----------------------------------------------------------
私の 2 番目のクエリは、最初のクエリから取得した ID の where_not_in のマテリアルを取得することです。そして、私は材料表のこの表の日付を持っています:
------DB Table materials--------
id | cid | mname | mdesc
----------------------------------------------------------
7 | 1 | accer | acer
10 | 1 | scanner | scanner
12 | 1 | prjector | scanner
----------------------------------------------------------
MySQLを試しました: could not select data with time range . 私は多くの研究を行ってきましたが、まだ必要なものが得られません。
したがって、これは私の関数全体が次のようになります。
function check_materials(){
//$this->output->enable_profiler(TRUE);
$start = date("H:i:s", strtotime($this->input->post('start')));
$end = date("H:i:s", strtotime($this->input->post('end')));
$date_reserve = $this->input->post('date_reserve');
$id = $this->input->post('id');
$sql = "SELECT id, materialID FROM schedule_dummy WHERE date_reserve = ? AND time(?) BETWEEN start_time AND end_time AND time(?) BETWEEN start_time AND end_time";
$query = $this->db->query($sql,array($date_reserve,$start,$end));
$ids = array();
if($query->num_rows() > 0 ){
foreach($query->result() as $rows){
$ids[] = $rows->materialID;
}
}
$data = array();
$n = count($ids);
$idz = array();
if($n > 0){
$q = $this->db->select('*')->where_not_in('id',$ids)->where('cid', $id)->get('materials');
if($q->num_rows() > 0){
foreach($q->result() as $row){
$data[] = $row;
}
}
return $data;
}else{
$q = $this->db->select('*')->where('cid',$id)->get('materials');
if($q->num_rows() > 0 ){
foreach($q->result() as $row){
$data[] = $row;
}
}
return $data;
}
}
このクエリでは、start_time = 13:30:00
toを選択すると、 ofend_time = 14:00:00
を持つ schedule_dummy からのデータが取得されないことが問題です。start_time と end_time は from からまでです。materialID
8
13:00:00
14:00:00
また、これを試すと:
$sql = "
SELECT materialID
FROM schedule_dummy
WHERE
date_reserve = ?
AND start_time >= time(?) AND end_time <= time(?)";
同じ入力を選択すると、schedule_dummy からデータが取得されません。では、ここで私がどこで間違いを犯していると思いますか? 私の論理は間違っていますか?または私のクエリのいずれか?ありがとう。