2013-04-28 62 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