在PHP中搜索MySQL数组中的日历日期?

时间:2009-12-14 21:15:32

标签: php mysql calendar

我正在构建一个日历,在数组方面我真的很蠢。 首先,我需要查询我的数据库,所以:


$events = mysql_query ("SELECT id,title,date WHERE date BETWEEN 2009-01-01 AND 2009-01-31")
or die(mysql_error());

所以,现在我需要订购这些事件,所以当我回复我的日历表时,我可以检查这个数组的事件。 在这个伟大的Calendar written by David Walsh中,他每天都会查询,但我认为这将是一场表演噩梦。 那么......任何想法我该怎么做?

3 个答案:

答案 0 :(得分:3)

首先,确保您将日期与日期进行比较。我认为您的代码应该是(即date周围的单引号):

$events = mysql_query ("SELECT id,title,date WHERE date 
BETWEEN '2009-01-01' AND '2009-01-31' order by date asc")or die(mysql_error());

假设date是日期列。

答案 1 :(得分:2)

我会在优雅的for循环中做到这一点

for($i=0;$i<30;$i++)
{
$events[] =  mysql_fetch_array(mysql_query ("SELECT id,title,date WHERE date BETWEEN 2009-01-01 AND 2009-01-{$i}"));
}

现在你有一个数组就像这样做

for($i=0;$i<count($events);$i++)
{ 
  echo $events["id"];
}

将返回该数组中事件的每个ID

答案 2 :(得分:1)

关于您的评论,您可以这样做:获取像Davek建议的事件(请注意ORDER BY!)

$events = mysql_fetch_assoc(mysql_query ("SELECT id,title,date WHERE date BETWEEN '2009-01-01' AND '2009-01-31' ORDER BY date asc"));

然后你得到了按日期排序的事件。要输出它,您可以这样做:

$last_date = null;
foreach($event in $events) {
    if($last_date !== $event['date']) {
        echo 'Events for day ' . $event['date'] . ": \n";
        $last_date = $event['date'];
    }

    echo $event['title'] . "\n"

}

注意:这只是一个粗略的草图,你必须调整输出当然,但它应该给你正确的想法。

输出看起来像这样(在我的例子中):

Events for 2009-01-01: 
Event 1
Event 2
Events for 2009-01-02: 
Event 1
.
.
.

评论后编辑:

您可以编写自己的功能:

function get_events($date, $events) {
    $result = array();
    foreach($event in $events) {
        if($event['date'] == $date) {
            $result[] = $event;
        }
    }
    return $result;
}

但是这样你每天都会一遍又一遍地搜索整个数组。如果从$events数组中删除已搜索的事件,则可以对其进行改进。所以每次你搜索一个较小的数组。但是,如果存在性能问题,我只会这样做。