【问题标题】:PHP + SQL : Search for event in the same day, same month, no matter the yearPHP + SQL : 搜索同一天、同一月、不限年份的事件
【发布时间】:2019-12-10 14:57:06
【问题描述】:

我想创建一个“在这一天”的小网站。 当我想在我的数据库中搜索“那天”发生的事件时,我遇到了问题。例如显示 12/10/2019、12/10/2014 或 12/10/2010 的事件。不仅来自当年。

我目前拥有的是一个执行 SQL 请求的 PHP 函数。但它只显示当年当天的事件。

$todayDate = date("Y-m-d");
$result = mysqli_query($conn,"SELECT * FROM memories WHERE datecontent LIKE '$todayDate'");

无论哪一年,我可以更改什么来搜索同一天+同一月的搜索?

【问题讨论】:

  • 数据库中datecontent列的类型是什么?
  • MySQL 具有 DATE() 和 MONTH() 函数,因此您必须将 $todayDate 拆分为日期和月份部分,并使用这些函数进行查询。
  • 列datecontent的类型是DATE。必要时可以更改!
  • 参见 DATE_FORMAT()。或者,如果需要索引,则将月份和日期与年份分开存储
  • @NevilleKuyt 当我需要搜索具有 2 个变量的列时,我不确定如何在 SQL 查询中使用 DATE() 和 MONTH()。能给我举个例子吗?

标签: php mysql date search days


【解决方案1】:

由于您希望返回始终与今天日期匹配的记忆,您可以完全在 SQL 中完成此操作,而无需 PHP 变量。这是一个示例架构。

CREATE TABLE memories (
 id INT,
 datecontent DATE
);

INSERT INTO memories (id, datecontent)
VALUES (1,'2000-12-10'),(2,'1990-03-22'),(3,'2008-12-24');

我们可以将这一天发生的事件与以下 SQL 语句样式匹配。

SELECT * FROM memories
WHERE MONTH(datecontent) = MONTH(CURDATE())
AND DAY(datecontent) = DAY(CURDATE());

在 PHP 中这样做会如下所示:


$result = mysqli_query($conn,"SELECT * FROM memories WHERE MONTH(datecontent) = MONTH(CURDATE()) AND DAY(datecontent) = DAY(CURDATE())");

【讨论】:

  • 这太棒了,我会尽快尝试。感谢您的回复!
  • 这是按要求工作的,谢谢您的时间 :)
【解决方案2】:

根据日期内容的类型,这些内容可能会满足您的需求。

$result = mysqli_query($conn,"
SELECT * 
  FROM memories 
 WHERE DAY(datecontent)=".date("d")." 
   AND MONTH(datecontent)=".date("m"));

【讨论】:

  • 感谢您的回答。在我的“记忆”表中,日期位于我的“日期内容”列中。如果不选择列,搜索是否有效?
  • 应该可以。我通常倾向于避免使用 SELECT * 但我不知道除了 datecontent 之外还有哪些列。如果它不只是列出您在 SELECT 部分中需要的列。这样做是更好的做法,因为如果表格顺序发生变化,结果顺序将不会发生变化。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 2022-07-21
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
相关资源
最近更新 更多