php SELECT(count)在mysql / pdo中WHERE格式化日期

时间:2015-10-07 14:58:06

标签: php mysql date select count

我需要选择(计数)具有由YEAR-MONTH-DAY格式化的特定日期的行。

我试试

 $date = $_GET['date'];

 // requete qui recupere les evenements
$result = "SELECT COUNT(*) FROM evenement WHERE STR_TO_DATE(start, '%Y-%m-%d') = $date";

 // connexion a la base de donnees
 try {
 $bdd = new PDO('mysql:host=;dbname=', '', '');
 } catch(Exception $e) {
 exit('Impossible de se connecter a la base de donnees.');
 }
 $sth = $bdd->query($result);
 echo json_encode($sth->fetchColumn());

其中日期变量是具有该格式的日期。我想计算行数并返回该日期的行数。

我也试试

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(start, '%Y-%m-%d') = $date";

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(DATE(start), '%Y-%m-%d') = $date";

但没有任何作用

任何想法?

由于

3 个答案:

答案 0 :(得分:1)

您应该将常量转换为日期,而不是列。所以,我的第一次尝试是:

SELECT COUNT(*)
FROM evenement
WHERE start = DATE('$date');

但是,这可能不起作用。您可能需要使用具有适当格式的str_to_date()

此方法更好的原因是优化程序可以利用evenement(start)上的索引。

答案 1 :(得分:1)

回复和评论都导致了这个答案

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(DATE(start), '%Y-%m-%d') = DATE('".$date."')"

问题是$ date变量需要DATE($ date),而SELECT需要引号。

答案 2 :(得分:0)

像这样改变

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(start, '%Y-%m-%d') = '".$date."'";

你需要在''引号中附上$ date,否则它会执行减法(2014-10-01 = 2003)