PDO и вложенная выборка - PullRequest
       13

PDO и вложенная выборка

1 голос
/ 28 августа 2009

Допустим, у меня есть что-то вроде этого:

$db=new PDO($dsn);

$statement=$db->query('Select * from foo');

while ($result=$statement->fetch())
{
    //do something with $result
}

Как бы я поместил другой запрос в цикл while? Даже если я создаю новый объект PDOStatement, кажется, что он перезаписывает курсор для самого верхнего оператора PDO. Единственное другое решение, которое я вижу, это либо a) получить весь внешний цикл сразу, либо b) открыть 2 разных соединения с базой данных. Ничто из этого не кажется хорошей идеей, есть ли другие решения?

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Вы должны быть в состоянии сделать любой другой запрос внутри цикла while, я бы сказал; как то так:

$db=new PDO($dsn);

$statement=$db->query('Select * from foo');

while ($result=$statement->fetch())
{
    $statement2 = $db->query('Select * from bar');
    while ($result2=$statement2->fetch()) {
        // use result2
    }
}

Вы пробовали это? Это должно работать ...


Тем не менее, если вы можете (если это нормально с вашими данными, я имею в виду), использование JOIN для выполнения только одного запроса может быть лучше для производительности: 1 запрос вместо нескольких обычно быстрее.

0 голосов
/ 28 августа 2009

Похоже, что вы пытаетесь получить связанные данные для записи, которую вы просматриваете, почему бы просто не присоединиться к ним при первом запросе? База данных будет лучше подключать точки внутри, чем любое количество кода, которое может сделать внешне.

Но, отвечая на ваш вопрос, я не вижу вреда в открытии другого соединения с тем же DSN, скорее всего, случится так, что вы получите еще один экземпляр объекта PDO, указывающий на то же фактическое соединение. Кроме того, но в зависимости от ожидаемого объема данных вы можете просто извлечь fetchAll и выполнить цикл по массиву php.

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