Каков наилучший подход для отображения нескольких строк MySQL в PHP? (получить, затем отобразить или получить ВСЕ, затем отобразить) - PullRequest
0 голосов
/ 24 марта 2012

как говорится в вопросе.

Я реализовал функцию, в которой он выбирает несколько строк из базы данных (* 1), а затем (* 2) создает каждую строку как объект. После создания экземпляров Объекты затем сохраняются в массиве, а затем возвращают результат в функцию вызывающей стороны, а затем перебирают массив результатов и отображают каждый объект и добавляют форматирование html для каждого.

Вот фрагмент кода:

function find_all() {
    //(*1) Fetch 30 comments from DB
    $sql  = 'SELECT * FROM comments';
    $sql .= ' ORDER BY datetime DESC LIMIT 30';
    return find_by_sql($sql);
}

function find_by_sql($sql='') {
    global $database;
    $result_set = $database->query($sql);
    $object_array = array();

    while($row = $database->fetch_array($result_set)) {
        //(*2) Instantiate each row to a Comment object
        //     and then stores each comment to an object array
        $object_array[] = Comment::instantiate($row); 
    }
    return $object_array;
}


//(*3) Format and display each result.
$comments = find_all();
foreach ( $comments as $comment ) {
    // Not sure if syntax is correct.. anyhow..
    echo "<li>$comment->get_text()</li>";
}

Тем не менее, мне нравится вышеуказанный подход, так как он чище, проще для чтения, удобен в обслуживании и имеет больше ООП. Но проблема в том, что для отображения требуется больше времени, чем для простой итерации каждого результата, чем для отображения каждого результата после его получения, например:

while ($row = mysql_fetch_array($sql)) {
    echo "<li>$row['text']</li>";
}

Я знаю причину, почему это медленно. Что я хочу знать, есть ли лучший способ решить проблему выше?

Хотя кэширование может быть хорошей идеей, оно не поможет, потому что мне нужно обновлять список каждый раз, когда список извлекается.

1 Ответ

1 голос
/ 24 марта 2012

Я думаю, что может быть немного быстрее, если скрипт получит только ту часть, которая вас интересует в наборе результатов, потому что fetch_array () возвращает 2 массива с одинаковым набором результатов: ассоциативный и числовой.

Добавив MYSQLI_ASSOC (если вы используете mysqli): mysqli_fetch_array ($ result, MYSQLI_ASSOC) или попробуйте mysql_fetch_assoc (), скрипт получит только ассоциативный массив.Вы можете проверить в pmpMyAdmin, чтобы увидеть различия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...