由于设计原因,我有一个表格,其中有 3 个选择下拉菜单(日、月和年)分开 我在使用 Post (d) Post m Post (Y) 将日期保存到 mysql 之前加入日期,从表单方法后插入日期,如 $d-$m-$Y 我将日期保存在连接 d-m-Y 的 varchar 20 列中它保存得很好
日期正常显示30-10-2014
现在的问题是,在搜索结果页面中,我想在日期 A 到 B 之间搜索结果并得到任何东西
此外,在搜索结果中我按日期排序时,我得到的结果来自任何日期
我不知道如何使用这种保存在 varchar 中的日期来排序或过滤结果,这是我现在正在测试的内容
$result = mysqli_query($db, "SELECT product, price, DATE_FORMAT(date, '%d-%m-%Y') AS new_date FROM `tableone` WHERE `user` = '$usernamefromform' ORDER BY `new_date` DESC Limit $start, $per_page");
请问我如何在不改变太多的情况下解决这个问题,特别是不是我的设计
最佳答案
您走在正确的轨道上,但在定义 DATE_FORMAT
之前,您需要将 VARCHAR
转换为日期。此外,您需要以一种可以正确排序的方式格式化日期(因此仅供 ORDER BY
使用),但按存储方式显示(如果这是您想要的):
SELECT product, price, date
FROM `tableone`
WHERE `user` = '$usernamefromform'
ORDER BY DATE_FORMAT(STR_TO_DATE(date, '%d-%m-%Y'), '%Y%m%d') DESC
用它构造一个 BETWEEN
查询真的很糟糕(并且可能会减慢一切),但是当您将 VARCHAR
转换为 DATE
时,您现在可以使用以下查询:
SELECT product, price, date
FROM `tableone`
WHERE `user` = '$usernamefromform' AND (date BETWEEN '2014-01-30' AND '2014-12-31')
ORDER BY date DESC
关于php - MySQL 选择表列 31-12-2014 type varchar as date order by date php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641880/