Получить весь массив SELECT

Тема в разделе "PHP", создана пользователем vanderv, 1 ноя 2011.

Модераторы: latteo
  1. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    Из базы забираю значения (SELECT * FROM tb)
    Далее делаю так:
    while($row = mysql_fetch_array($q)){
    $select[] = $row;
    }

    Вопрос как это организовать без цикла? чтобы сразу получить весь запрос в массиве.
     
  2. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
  3. weststat

    weststat Создатель

    Регистр.:
    21 июл 2010
    Сообщения:
    49
    Симпатии:
    1
  4. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    А можно узнать в чём цикл провинился?
     
  5. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    есть мнение, что забор результата одним массивом происходит гораздо быстрее чем через while.
     
  6. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    Есть мнение, что там спрятан всё тот же цикл (курсор пробегает по выборке). Просто для PDO он вынесен в расширение. Десятитысячные секунды при этом выигрываются. Не более.
     
  7. chibit

    chibit Life sucks.

    Регистр.:
    4 дек 2007
    Сообщения:
    420
    Симпатии:
    285
    Судя по тестам (PDO)
    http://stackoverflow.com/questions/2770630/pdofetchall-vs-pdofetch-in-a-loop
    http://gonzalo123.wordpress.com/2011/03/28/performance-analysis-fetching-data-with-pdo-and-php/

    Разницы практически нету.
    Другое дело, что fetchAll занимает гораздо больше памяти (если конечно обрабатывать результаты сразу, а не складывать всё результаты в один массив).
     
  8. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    там дальше в комментах немного другой резальт

    As Mihai Stancu was saying, there is almost no memory difference though fetchAll beats fetch + while.

    Result :
    fetchAll : 0.160676956177s, 118539304b
    fetch : 0.121752023697s, 118544392b

    I got the results above with running while correctly:

    $i = 0;
    while($data[$i++] = $stmt->fetch()){
    //
    }

    So the fetchAll consumes less memory, but fetch + while is faster! :)


    хз кому верить :)
     
  9. chibit

    chibit Life sucks.

    Регистр.:
    4 дек 2007
    Сообщения:
    420
    Симпатии:
    285
    thoth777, да, +- 0.03 секунды при выборке > 50к (или 200к) элементов сильно меняет дело :D
    Существенная разница только в памяти. Можно конечно сначала получить все элементы, потом отдельным циклом его обрабатывать, но зачем? Когда можно сразу его обработать в порядке поступления.
    Себе ;). Возьми да проверь сам :D.
     
  10. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    лично я использую mysql_fetch_array для получения результата выборки. хотя бы потому что не хочу заморачиваться с совместимостью версий. на одном хостинге - одно, на другом- другое.
    и так приходится извращаться - то одного модуля не хватает, то другого. а тут еще приходится думать о том, какая версия пыхыпы у кого установлена.

    такшта я - за последовательную выборку.

    Добавлено через 36 секунд
    себе я верю. и даже проверять не буду :)