2014-09-19 60 views
0

我知道我的問題與已經回答的其他問題類似,但是我的問題是不同的,因爲我需要一些替代方案或建議,而不是如何去其他方法。Mysql在兩個日期之間獲取表結果

我的問題是:我想根據想要的用戶無論是兩個日期或一個之間獲得價值..

enter image description here

當有一天的用戶請求數據.. PHP查詢數據成功..但問題是,當請求的數據是兩個日期之間..

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` >= '$first_date' AND 
`meta_transaction_date` <= '$second_date' "); 
     return $query->result(); 

我得到一個空集...

所以我想可能是VALU es沒有提交正確的..所以我回應的價值,看看他們是否正確與否。我發現他們是正確的...

$ first_date = 09/13/2014;
$ second_date = 09/19/2014;

但是,如果我試圖把像

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` >= '09/13/2014' AND 
`meta_transaction_date` <= '09/19/2014' "); 
     return $query->result(); 

價值得到我的結果返回正確的..所以有什麼我做錯了?

+0

什麼是對'$ first_date'的數據類型,'$ second_date'和列'meta_transaction_date'? – Arth 2014-09-19 13:55:22

+0

'$ first_date'&'$ second_date'是字符串,但它們來自數組'$ first_date = $ date ['range_one'];'&'$ second_date = $ date ['range_two'];'與'meta_transaction_date'相同我已經設置了類型爲Varchar ... – 2014-09-19 14:00:52

+0

你嘗試過兩種函數嗎? – CodeSlayer 2014-09-23 05:39:52

回答

1

變化的類型meta_transaction_dateDATE就是這樣!當通過DATE s時也使用標準'yyyy-mm-dd'

您的問題可能源於'mm/dd/yyyy'美國日期格式的字符串排序,這對於編碼來說太可怕了。如果您希望以此格式顯示DATE,請在最終輸出時將其轉換爲SELECT

+1

這是真的..關..我知道這是不明智的使用該格式的日期,但這些價值來自JavaScript date_picker所以我有這個想法逃避額外的喧囂,我雖然以我自己的方式處理日期..但知道我按照你的意見,並使用'DATE'雖然它沒有工作..但我發現前後的值有空間,所以我使用'$ first = trim($ first_date);'和問題解決了..謝謝老闆 – 2014-09-19 15:33:59

1

MySQL有一個內置稱那間功能,您可以使用這樣的:

SELECT * FROM table_name WHERE date_column BETWEEN 'start_date_parameter' AND 'end_time_parameter' 
+0

這並沒有回答這個問題。 – Arth 2014-09-19 13:59:28

+0

在Mysql控制檯上,即使我在我的php代碼中使用實際日期,該代碼也能正常工作..但是,如果將值替換爲變量...我得到空集...您的代碼在sql控制檯上工作,但在我的php代碼中無空集 – 2014-09-19 14:12:31

0

儘量先投的日期,然後用between聲明:

$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` BETWEEN  
date_format(str_to_date('$first_date', '%d/%m/%Y'), '%Y-%m-%d') AND 
date_format(str_to_date('$second_date', '%d/%m/%Y'), '%Y-%m-%d')"); 
+0

我使用這個技巧......我想我會在接下來的事情上需要它,但我只是用很長的路和'爆炸('/',$ first_date);'他們我將每個值分配給關聯數組。 。這是長時間的划船,但是謝謝.. – 2014-09-19 15:36:53

0
$query = $this->db->query("SELECT * FROM `meta_receipt_data` 
WHERE `meta_transaction_date` >= '09/13/2014' 
AND `meta_transaction_date` <= '09/19/2014' "); 

由於上述似乎工作正常,問題出在您的代碼。

$query = $this->db->query("SELECT `meta_transaction_date` FROM meta_receipt_data WHERE 
          meta_transaction_date BETWEEN " 
          .date("Y-M-d", (strtotime($first_date)))." AND " 
          .date("Y-M-d", (strtotime($second_date)))); 

一句忠告,不要使用類似SELECT *查詢,因爲它們會降低應用程序的性能。而我剛纔讀您的評論對你自己的問題:

我已經設置了類型爲VARCHAR

不要那樣做。最好使用DATE類型來存儲日期。你可以使用查詢:

ALTER TABLE `meta_receipt_data` 
MODIFY `meta_transaction_date` DATE NOT NULL;` 

那麼,假設你想保持列不接受空值。

+0

對不起已經忘記寫的答案:P – 2014-09-19 14:38:10

+0

我發現前後的值有空間,因此我使用'$ first = trim($ first_date);'和問題解決了..並且我還將列類型更改爲'DATE'謝謝.. – 2014-09-19 15:34:43

+0

很好的啓示:P – 2014-09-19 21:58:33

0

我發現價值之前和之後,所以我用$first = trim($first_date);和問題解決了空間......

相關問題