我正在尝试按日期查询mysql,我有一个变量$today=date("Y-m-d");
我想用它来从我前一年的"posts"表中删除"post_content"。然后我将使用php来回显这些数据。
我到底该怎么做?也许需要一段时间来循环更改日期并查询它?我找到了"select fields from tables order by dateField",并想象这样的语句会存在,其中有一个参数,可以让我们按年份查询我的posts表。。。
为了澄清,我希望每年查询帖子,就像时间跳跃一样。
我已经用这个绕圈子跑了大约两个星期了,非常感谢你的帮助!
**编辑当前代码
$sql = "SELECT * FROM posts
WHERE date > CURDATE() - INTERVAL 1 YEAR
ORDER BY date DESC";
// SELECT * FROM conversions WHERE date = CURRENT_DATE() - INTERVAL 1 DAY AND `user_id` = '$user_id';
$result = $dbc->query($sql);
if ($result->num_rows > 0) {
$i=1;
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<li>";
echo "<p>".$row['post_date']."</p>";
// $clientid.$i =
echo "<h3>".$row["post_content"]."</h3>";
echo "</li>";
}//end while
$i++;
} else {
echo "0 results found in user database!";
}
您的php代码似乎混淆了列名date
(出现在WHERE
子句中)和post_date
(显示为fetch_assoc()
子句产生的列名)。您实际上同时拥有date
和post_date
列吗?
此外,看起来WHERE
子句中的不等式可能相差一个。
如果你想从今天开始获得最近的一年,那就是
WHERE date >= CURDATE() - INTERVAL 1 YEAR
在此之前的一年,它是
WHERE date >= CURDATE() - INTERVAL 2 YEAR
AND date < CURDATE() - INTERVAL 1 YEAR
如果您想要的是当前日历年,请使用此项。它有点复杂,因为它允许在date
列上使用索引。DATE_FORMAT()
表达式将当前日期(例如2015-03-10)转换为2015-01-01。
WHERE date >= DATE_FORMAT(CURDATE(), '%Y-01-01')
同样,当前日历年之前的日历年也是这样做的。
WHERE date >= DATE_FORMAT(CURDATE(), '%Y-01-01') - INTERVAL 1 YEAR
AND date < DATE_FORMAT(CURDATE(), '%Y-01-01')
从您评论中的附加信息来看,您似乎希望在SQL中使用YEAR间隔来解决此问题,并且可能按降序排列。
SELECT * FROM conversions
WHERE post_date > CURDATE() - INTERVAL 1 YEAR
ORDER BY post_date DESC