我真的很难过 - 我的数据库中有一个表,其中一个名为'today'的列有日期和时间记录。该列的条目如下所示:
October 25, 2014, 4:58 am
October 25, 2014, 4:36 am
我在按日期划分行时遇到问题;我认为时间戳正在搞乱MySQL查询。我需要一个SQL查询来提取变量$ today与“今天”列中的日期信息匹配的任何记录。这不起作用:
$today = date("F j, Y"); // looks like this: October 25, 2014
$result = mysqli_query($link,"SELECT * FROM records WHERE today = $today"); // 'today' represents the column in the table
while($row = mysqli_fetch_array($result)) {
echo var_dump($row);
}
我只是得到一个空的结果,我认为由于时间戳。有人可以建议一个更好的MySQL查询,它只能获取今天$今天匹配“今天”列中日期的行吗?
答案 0 :(得分:2)
虽然在varchar
中将日期和时间存储为字符串并不是一个好主意,但您仍然可以更改查询以将包含当前日期的string
与LIKE
语句匹配:
$result = mysqli_query($link,"SELECT * FROM records WHERE today LIKE '$today%'");
这只是为了让您当前的设置作为临时修复工作,但我强烈建议您查看datetime
和timestamp
或类似的日期类型,如果这是一个严肃的项目,而不仅仅是玩周围。编程。
<强>更新强>
使用datetime
,您可以获得与今天相同的日期:
SELECT * FROM `records` WHERE `today` = CURDATE();
使用timestamp
,您需要将其作为date
传递,以便您的查询为:
SELECT * FROM `records` WHERE date(`today`) = CURDATE();
答案 1 :(得分:0)
您可以使用MySQL日期函数:
SELECT *
FROM records
WHERE today = CURRENT_DATE;
如果today
列上有时间组件,则最佳结构为:
SELECT *
FROM records
WHERE today >= CURRENT_DATE and today < date_add(CURRENT_DATE, interval 1 day)
答案 2 :(得分:0)
很明显两个日期都不相同。两个日期都被视为文本值,并且不相等。您需要在MySQL查询中转换包含日期的列:
$result = mysqli_query($link,"SELECT * FROM records WHERE DATE_FORMAT(today, '%F %j, %Y') = $today");
请注意,您必须更改列以存储DATE类型的值。或者只使用其他答案中提出的查询。