gpt4 book ai didi

php - MYSQL - 查询匹配日期的项目

转载 作者:行者123 更新时间:2023-11-29 05:00:15 25 4
gpt4 key购买 nike

我正在用 PHP 制作一个日历,我有一个 31 天的 for 循环(或取决于一个月中有多少天),每一天都用 $listDay 写出。

在我的 MySQL 数据库中,我有一个名为“eventDate”的字段,它带有一个 unix 时间戳,并且我有一个根据时间戳构建的变量 $event_day 仅用于当天。我不知道如何编写一个查询“如果 $listDay == $event_day 然后显示这个”。这段代码可能有点乱,因为我一直在玩弄一堆选项。

这应该做的是,如果那天有一个事件,用一个链接替换标准数字,如果将鼠标悬停在该链接上将显示一个事件的小弹出窗口(这是在 js 中处理的,我确实有弹出窗口正常工作)

我知道我处理 MySQL 语句的方式有问题,但我不太明白。哦,是的,我在数据库中创建了一个名为“eventMonth”的字段,因为我不知道如何使查询“匹配”一个月与时间戳。

$month = date("F");
$vmonth = date("n");
$current_month = date("n"); //value will change if the user changes the month they are viewing
$current_year = date('Y');
$theday = date(w, mktime(0, 0, 0, $current_month, 1, $current_year));
$daysinmonth = date("t", mktime(0, 0, 0, $current_month, 1, $current_year));

echo "<table bgcolor=\"#C68282\" style=\"border: #990000 1px solid; font-size:8pt; font-family: Tahoma; color: #000000\" cellpadding=\"1\" cellspacing=\"0\" width=\"129\">";
echo "<tr>
<td colspan=7 align=center style=\"font-weight: bold;\">".date('F Y', mktime(0, 0, 0, $current_month, 1, $current_year))."</td>
</tr>";
echo "<tr style=\"background-color: 990000; color: white;\">";
echo "<td align=center>S</td>";
echo "<td align=center>M</td>";
echo "<td align=center>T</td>";
echo "<td align=center>W</td>";
echo "<td align=center>T</td>";
echo "<td align=center>F</td>";
echo "<td align=center>S</td>";
echo "</tr>";
echo "<tr>";
for ($i=0;$i<$theday;$i++)
{
echo "<td>&nbsp;</td>";
}
$query = "SELECT * FROM calendar WHERE eventMonth = '77'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
for ($list_day=1;$list_day<=$daysinmonth;$list_day++)
{
$event_day = date('j',$row['eventDate']);
echo "<td align=\"center\">";
if($list_day == $event_day) {
echo "<a href=\"#\" class=\"cal\">";
echo $list_day . "<span class\"cal\"><div style=\"border-bottom: 1px solid #999999; padding: 2px; \">" . $month ."&nbsp;". $list_day .",&nbsp;". $current_year ." </div><div style=\"padding: 2px;\">" . $row['event'] ."</div></span></a></td>";
} else {
echo $list_day;
}
if ($theday == 6)
{
echo "</tr>";
echo "<tr>";
$theday = -1;
}
$theday++;
}
echo "</tr>";
echo "</table>";

最佳答案

使用 MySQL 的 DATE_FORMAT :

SELECT * FROM calendar WHERE DATE_FORMAT(timestamp, '%Y-%m-%d') = '2009-12-11';

但是如果您每天都查询数据库,那么您将进行 30 次不必要的查询。更明智的做法是在一个查询中提前获取所有事件,然后从中构建一个数组,如下所示:

// Get all events for December 2009
$q = mysql_query("SELECT
DATE_FORMAT(timestamp, '%d') AS day,
event_title
FROM
calendar
WHERE
DATE_FORMAT(timestamp, '%Y-%m') = '2009-12'");

$events = array();
// Loop through the results and put events in array
while($row = mysql_fetch_array($q)) {
$events[$row['day']][] = $row['event_title'];
}

现在 $events 将月份的每个事件都按日期索引,当您打印日历时,您可以使用以下方法获取当天的事件数量:

for($d = 1; $d <= 31; $d++) {
if(isset($events[$d])) {
echo count($events[$d])." events!";
} else {
echo "No events.";
}
}

关于php - MYSQL - 查询匹配日期的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com