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

问题描述:

我正在创建一个日历,而且在数组方面我真的很笨拙。所有的 首先,我需要查询我的数据库,所以:使用PHP搜索MySQL数组中的日历日期?


$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,他每天都会做一个查询,但我想这会是一场性能噩梦。 所以......任何想法我怎么能做到这一点?

好的,关于你的意见NTS你可以做这样的事情:得到的事件,如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阵列中删除已经搜索到的事件,则可以对其进行改进。所以每次你搜索一个更小的阵列。但如果出现性能问题,我只会这样做。

+0

@Felix:谢谢,你是在正确的轨道上。我想知道:是否有任何方法来构建函数,以便我可以调用get_events($ day,$ events),并搜索数组$ events并打印该特定$ day的事件?非常感谢。 – fedeisas 2009-12-15 17:22:29

+0

@Felix:谢谢!真的感谢 – fedeisas 2009-12-15 17:36:34

首先,确保您将日期与日期进行比较。我觉得你的代码应该是(即周围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是一个日期列。

+0

是的,我写了没有单引号的SQL查询,是的,我比较日期和日期。我的问题是下一步:我如何订购阵列,然后只打印第X天的事件。 – fedeisas 2009-12-14 23:15:34

+0

您想要输出特定日期X的事件,还是仅打印第1天的所有事件,然后打印所有事件第二天,....? – 2009-12-15 00:44:01

+0

第二个。我在日历中打印,所以我需要回显每个事件。我想要做的是避免每天查询。 – fedeisas 2009-12-15 02:58:34

我会做,在一个优雅的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}")); 
} 

现在你有一个数组做somethingg与它这样的

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

将返回每个ID在事件该阵列

+0

但在这种情况下'事件[0]'可以内容的阵列的一个元件(1天),'事件[1]'内容与两个元件(1天和第2天)等等...'$阵列事件[29]'内容整天。你应该将迭代器从1更改为至少 2009-12-14 21:49:22

+0

不真的有含有一整天〜30的阵列,使得事件[0]是一个天一个很快 – streetparade 2009-12-14 22:22:24

+0

和么,如果一个单一的一天有5个事件? – fedeisas 2009-12-14 23:06:15