2014-10-20 78 views
0

我想通過計算自動整數(id)在開始日期和結束日期之間出現的次數來嘗試通過日期範圍對登錄進行計數。WHERE date BETWEEN not working

我從上一頁的表單(y-m-d)獲取開始日期和結束日期。

$start_date=$_POST['start_date']; /*in this case its "2014-10-10"*/ 
$end_date=$_POST['end_date']; /*in this case its "2014-10-20"*/ 


$sql = <<<SQL 
SELECT id, COUNT(*) as login_count FROM `usage` 
GROUP BY id 
WHERE date 
BETWEEN $start_date AND $end_date 
SQL; 

不過,我不斷收到以下語法錯誤

「有運行查詢[您的SQL語法錯誤的錯誤;檢查對應於您的MySQL服務器版本的權利手冊語法使用'第3行'的地點2014年10月10日和2014-10-20'之間]「

我做錯了什麼?

+0

除非你引用的日期字符串,它看起來像直算術2014年減10減10這給出1994 – 2014-10-20 08:23:12

+0

使用括號http://stackoverflow.com/questions/3822648/how-do-i-query-between-two-dates-using-mysql – 2014-10-20 08:23:14

+0

括號不是必要的 – 2014-10-20 08:24:04

回答

0
try it 

$sql = <<<SQL 
SELECT id, COUNT(*) as login_count FROM `usage` 
WHERE date 
BETWEEN '$start_date' AND '$end_date' 
GROUP BY id 
SQL; 
+0

非常感謝! :) – Dan 2014-10-20 08:41:28

1

你$ sql中應該是:

$sql = <<<SQL 
SELECT id, COUNT(*) as login_count FROM `usage` 
WHERE date 
BETWEEN $start_date AND $end_date 
GROUP BY id 
SQL; 

GROUP BY CLAUSEAFTER WHERE語法

+1

還應該引用日期值 – 2014-10-20 08:24:38

+0

謝謝你的指出一個@Ma rkBaker。欣賞它。 – Satya 2014-10-20 08:26:17

0

首先,你應該引用您的日期「$起始日期」和「$ END_DATE」,你一定要確保這些值逃避避免SQL注入。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – skolima 2014-10-20 09:45:33

+0

Fair do's,但沒有人指出SQL注入,因爲此代碼會非常脆弱? – Ukuser32 2014-10-20 11:24:37

+0

當然,但這應該進入一個評論:-) – skolima 2014-10-20 13:08:03

0

你的SQL有錯誤。試試這個:

SELECT id, COUNT(*) as login_count FROM `usage` 
WHERE (date BETWEEN $start_date AND $end_date) 
GROUP BY id; 
1

你需要把周圍的日期文字'' S IN的SQL就像這樣:

$response = mysql_query("SELECT * FROM `db`.`$sql_table` WHERE (date BETWEEN '$end_date' AND '$start_date') ORDER by id ASC ")or die(mysql_error()); 
+1

這確實回答了這個問題(顯然是正確的),但它是更有用的添加一個簡短的解釋你的答案。就像「你需要把日期文字加上引號」就足夠了。 – Rhumborl 2014-10-20 09:03:03

+0

@Rhumborl,感謝。將在我的下一個答案上做。只是新的stackoverflow。 – 2014-10-20 09:10:52