从mysql查询用php显示即将发生的事件

enyaitl3  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(390)

我正在处理一个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()

x759pob2

x759pob21#

你的问题是你在用字符串比较日期。结果至多是无法预测的。您需要重写表结构,将eventdate设置为日期而不是varchar列。

eventDate varchar(255)  <== varchar is the WRONG type here; you want DATETIME or DATE or similar.

请阅读这里关于如何将您的列正确转换为日期类型。
我已经为你重写了你的代码,因为我觉得这个地方应该从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/>"
 } 
?>

相关问题