我是否在WP Answers上发布这个或者因为我在谈论wp_Queries而感到矛盾,但我认为这更像是一个普通的PHP问题,所以这里有。
我正在项目中构建一个事件日历功能。如果你需要一个视觉:http://theseattlevine.com/wordpress2014/calendar/?m=Feb&y=2014
,我在这里可以看到我所拥有的使用与date()和strtotime()函数通信的查询参数生成天数(由正方形表示,就像普通日历一样),该函数生成当月的适当天数并在月份上开始月份适当的一天(周一至周日)。我使用for循环根据每个月的天数生成有限次数的方块。
现在,在我想要的每个广场内,显然有一个当天发生的事件清单。在我的大脑中,最合乎逻辑的方法是在每个方格中有一个查询循环,找到日期在当天凌晨12:00到晚上11:59之间的所有事件,然后只回显每个事件的标题。但是,似乎这种类型的查询在for循环中不起作用,而且我所做的研究使我相信在for循环中放置一个循环是一个坏主意,因为它会创建一个大数字或请求服务器。
最后,我的问题是,最好的方法是什么呢?如何在每次出现for循环时查询数据库中的帖子(如Wordpress中的wp_query)?
答案 0 :(得分:1)
如果您创建另一个以下列格式存储数据的表: 日期||活动名称
然后从这个表中查询特定日期将非常容易。
答案 1 :(得分:1)
我会尝试以不同的方式进行操作。在一个页面上投掷30xn请求,并且有m个用户查看该页面,您的数据库最终会哭。
这个怎么样?
从SQL获取当月的所有事件,将它们放入如下数组中:$event[$dayofmonth][title]=$title
在$date[$weeknumber][$dayofweek]=$dayofmonth
等表单中获取另一个数组,以帮助构建日历框架
然后,当您遍历$ date来构建日历框架时,您可以使用$ dayofmonth来引入事件标题,或者如果您将其构建到事件数组中,则需要更多详细信息。
< / LI> 醇>这样你只需要1个查询(你很有可能只使用php来构建那个$ date数组。
示例代码如下:
/********** Build $event **********/
$result=however_you_get_your_mysql_result(); //You bound to know the SQL part.. the result set should already be filtered to just this month only
$event=array();
foreach($result as $r){ // In here I assume you have at least a title and a event_start_time in resultset
$dayofmonth=date("Y-m-d",strtotime($r['even_start_time'])); // To get just the date part
$event[$dayofmonth]['title']=$r['title'];
$event[$dayofmonth]['detail']=$r['detail']; // If you have detail or other fields.
}
/********** Build $date **********/
$when=date('Y-m-d'); // Let's say this month
$year=date('Y', strtotime($when));
$first_week_of_month=date('W', strtotime(date('Y-m',strtotime($when)))); //wk number of first day in month
$last_week_of_month=date('W',strtotime(date('Y-m-t', strtotime($when)))); // wk number of last day in month
$date=array();
for($w=$first_week_of_month; $w<$last_week_of_month+1; $w++){ // Set Week boundary
for($d=1; $d<8;$d++){ // For 7 weekdays
$dayofmonth=date('Y-m-d',strtotime($year."W".$w.$d));
$date[$w][$d]=$dayofmonth;
}
}