按日期查询mysql


Query mysql by date

我正在尝试按日期查询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()子句产生的列名)。您实际上同时拥有datepost_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