PHP / MySql更简单,更高效的代码

时间:2013-04-28 20:48:59

标签: 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 个答案:

答案 0 :(得分: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