我正在处理一个仅显示即将发生的事件的MySQL查询。但是我每次都会出现一个空白屏幕,并显示在过去的事件列表中。
今天= 2018年7月22日,
即将举行的活动日期(eventID)= 2018年7月29日
我的查询是:
SELECT * FROM event WHERE eventDate > CURDATE() ORDER BY STR_TO_DATE(eventDate,'%d %F %Y')
PHP代码(无CSS):
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) { ?>
<?php echo $row['eventName'] . "<br/>" ?>
<?php echo $row["eventDate"] . "<br/><br/>" ?>
<?php } ?>
数据库表:
eventID int(11) AUTO_INCREMENT
eventName varchar(255)
eventDate varchar(255)
我已经尝试过CURRENT_DATE()
,NOW()
和>=
正如我告诉我的,我即将举行的活动与过去的所有其他活动一起显示在过去的列表中。 eventDate < CURDATE()
答案 0 :(得分:1)
您的问题是,您正在将DATE与STRING进行比较。结果将是不可预测的,最好是 。您需要重写表结构,以将eventDate设置为DATE而不是VARCHAR列。
eventDate varchar(255) <== varchar is the WRONG type here; you want DATETIME or DATE or similar.
请READ HERE关于如何将列正确转换为DATE类型。
我已经为您重写了代码,因为我认为这个地方应该参考CodeReview的一些提示。
$sql = "SELECT eventName, eventDate FROM event WHERE eventDate > CURDATE() ORDER BY eventDate";
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) {
echo htmlentities($row['eventName']) . "<br/>"
echo $row["eventDate"] . "<br/><br/>"
}
?>