2014-02-28 61 views
1

我是否在WP Answers或這裏因爲我在談論wp_Queries而發佈這個問題,但我認爲這更多的是PHP的一般問題,所以在這裏。正確的方式來查詢for循環

我正在項目中構建事件日曆功能。到目前爲止,我可以在這裏看到如果你需要一個視覺效果:http://theseattlevine.com/wordpress2014/calendar/?m=Feb&y=2014

使用與date()和strtotime()函數進行通信的查詢參數生成天數(用正方形表示,如正常日曆) )函數,該函數會在當月生成適當的天數,並在適當的一天(週一至週日)開始月份。我正在使用for循環根據每個月的天數來生成有限次數的正方形。

現在,我想在每個廣場內顯示當天發生的事件列表。在我的大腦中最合乎邏輯的方法是在每個方塊中都有一個查詢循環,用於查找當天中午12:00至晚上11:59之間的所有事件,然後僅回顯每個標題的標題。但是,似乎這種類型的查詢在for循環內不起作用,並且我所做的研究讓我相信在for循環中放置一個循環是一個糟糕的主意,因爲它會創建大量或請求服務器。

我的問題最後是什麼纔是最好的方法呢?我將如何查詢每個for循環內的數據庫中的帖子(如Wordpress中的wp_query)?

回答

1

我會嘗試做不同的操作。在一頁上投擲30xn請求,並且有m個用戶查看該頁面,您的數據庫最終會哭泣。

這個怎麼樣?

  1. 獲取從SQL月份的所有事件,把它們放到一個這樣的數組:$event[$dayofmonth][title]=$title

  2. 獲取像$date[$weeknumber][$dayofweek]=$dayofmonth形式的另一種陣列,以幫助建立檯曆架

  3. 然後當您迭代$ date來構建日曆框架時,您可以使用$ dayofmonth來引入事件標題,或者將更多細節構建到事件數組中。

這樣,你只需要1個查詢(一個很好的機會,你可以只使用PHP構建$日期陣列

示例代碼如下:

/********** 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; 
    } 
} 
+0

啊哈這!我只是需要一個人來解開我的大腦關於光禿禿的骨頭的步驟,謝謝你! – Eckstein

+0

原來我仍然遇到這個問題,你可能會發布什麼代碼來創建你提到的陣列嗎? – Eckstein

+0

$事件或$日期? –

1

如果您製作另一張以下列格式存儲數據的表格: 日期||活動名稱

那麼只需從該表中查詢特定日期即可。