2013-04-28 68 views
0

我目前使用三個不同的查詢來輸出信息從數據庫..我已經把我在下面做的一個樣本,我只是好奇,如果有一個更高效更簡單的方式吐出這個相同的信息。PHP/MySql更簡單更高效的代碼

我有一個事件數據庫表,它有一個日期字段和父事件字段。我必須按事件日期對事件進行分組,然後將每個日期的事件吐出,然後吐出這些事件下面的每個子事件(通過使用父事件字段)。

下面是我的代碼是如何奠定了一個樣品,我只是沒有那麼好MySQL中,如果有一個更簡單的查詢等

感謝

$result = mysql_query("SELECT * FROM events GROUP BY date"); 
while ($event_date = mysql_fetch_assoc($result)) { 

    echo 'Date Header'; 

    $result2 = mysql_query("SELECT * FROM events WHERE date = '" . $event_date['date'] . "' && parent_id = ''"); 
    while ($event = mysql_fetch_assoc($result2)) { 

     echo 'Event display code'; 

     $result3 = mysql_query("SELECT * FROM events WHERE date = '" . $event_date['date'] . "' && parent_id = '" . $event['id'] . "'"); 
     while ($event = mysql_fetch_assoc($result3)) { 

      echo 'Sub Event code'; 

     } 
    } 
} 

爲了實現像標記下面。

<h3>Date 1</h3> 
<div class="top-level-event"> 
    Some code 
</div> 
    <div class="sub-level-event"> 
     some sub level code 
    </div> 
    <div class="sub-level-event"> 
     some sub level code 
    </div> 

<h3>Date 2</h3> 
<div class="top-level-event"> 
    Some code 
</div> 
    <div class="sub-level-event"> 
     some sub level code 
    </div> 
    <div class="sub-level-event"> 
     some sub level code 
    </div> 

回答

1

您可以使用一個查詢:

SELECT * FROM events e1 
LEFT JOIN events e2 ON e1.id=e2.parent_id AND e1.date=e2.date 
WHERE e1.parent_id='' 
ORDER BY e1.date 
+0

能否請你解釋一下?所有這些返回的是沒有分配parent_id的所有結果(IE:頂級事件)。我想這個問題是關於PHP以及查詢更多的問。我只是試圖確定我在做什麼是矯枉過正,或者是否可以通過簡單的方式來實現db中每個不同日期的以下類型html標記。我用我試圖實現的標記類型更新我的代碼。 – skywalker14 2013-04-28 23:38:54