我有這兩個查詢。我的第一個問題是檢查材料的可用性,這也是我現在遇到的主要問題。它將一次選擇所有已保留的材料。 所以我有這個表日期schedule_dummy表: 注:我使用codeigniter。搜索時間範圍不工作在PHP/MySQL
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
----------------------------------------------------------
我的第二個查詢是檢索從第一個查詢中檢索到的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
到end_time = 14:00:00
然後從schedule_dummy與8
的materialID
數據不檢索。由於start_time和end_time是從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檢索數據相同的輸入。 那麼你認爲我在這裏犯了什麼錯誤?我的邏輯錯了嗎?或者我的任何疑問?謝謝。
可能重複的[如何使用來獲取數據> = AND <=在PHP/MySQL的一個12小時時間格式?](http://stackoverflow.com/questions/18531453/how-to-get -h-data-using-and-in-a-12hr-time-format-in-php-mysql) –
@Venkat:Yah它也是我的線程。但情況並非如此。並請請閱讀我的問題。 – leonardeveloper
請顯示你的表的結構:'describe schedule_dummy' –