我需要选择(计数)具有由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";
但没有任何作用
任何想法?
由于
答案 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)