Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > [PDO] Можно ли сделать 2 запроса одновременно.


Автор: Рыжий 21.2.2007, 20:10
Здравствуйте!
Обыскал все что смог – реального примера не нашел. Никак не могу решить эту проблему, уже начался нервный тик.

Нужно (упростил до максимума ) ):
Код

Select id from `BD`

While ($row=mysql_fetch_array(…))
{
Select id from `other_bd` where `param` = $row['id'];
}


Никак не могу это сделать в PDO smile
Вот максимум, чего я добился: 
(и думаю копать нужно в сторону ->prepare() )

Код


$stmt = $db->prepare("select * from `users` where `id`=:id limit 1");

$result = $db->query("select id from `categories`");

while ($rs=$result->fetch(PDO::FETCH_ASSOC))
{

      $stmt->bindParam(":id",$rs['id']);
      $stmt->execute();

      $row=$stmt->fetch(PDO::FETCH_ASSOC);

      echo $rs['id'].' - '.$row['login']."<br />";
}
$stmt=null;

сразу предупреждаю – пример не несет никакой смысловой нагрузки. НО синтаксически он верный! И если делать то же самое без PDO – все работает.

Автор: mishaSL 21.2.2007, 21:33
Не часто работаю с PDO, но попробуй так:
Код

$stmt = $db->prepare("select * from `users` where `id`=:id limit 1");
$result = $db->query("select id from `categories`");
while ($rs=$result->fetch(PDO::FETCH_ASSOC))
{
      $stmt->execute(array(':id' => $rs['id']));
      $row=$stmt->fetch(PDO::FETCH_ASSOC);
      echo $rs['id'].' - '.$row['login']."<br />";
}
$stmt=null;


Если не работает, то покажи что выводит.

Добавлено @ 21:36 
Ты хоть и сказал что скрипт не имеет смысловой нагрузки, но всеже добавлю, что делать запросы в цикле не самое хорошее решение.

Автор: Glip 21.2.2007, 22:56
по сильно упрощеному примеру сразу хочется собрать массив id-ов и сделать Select id from `other_bd` where `param` in ( массив );
или выгрести все сразу join-ом smile

Автор: Рыжий 21.2.2007, 23:54
Glip, Точна! Join поможет!!!
Код


$result = $db->query("select categories.id as id ,users.login as login from `categories`,`users` where categories.id=users.id");

while ($rs=$result->fetch(PDO::FETCH_ASSOC))
{
  echo $rs['id'].' - '.$rs['login']."<br />";
}



mishaSL, Код собственно и ничем не отличается от моего. $row['login'] просто пустой, хотя $rs['id'] имеет значения. Интересно, а можно ли в while вообще работать с PDO. smile 

Автор: Рыжий 23.2.2007, 02:11
Цитата(Рыжий @  21.2.2007,  23:54 Найти цитируемый пост)
Интересно, а можно ли в while вообще работать с PDO.  


Я думаю нет, как и невозможно произвести два запроса одновременно. Для этого нужно использовать буферизацию вывода.

Автор: Рыжий 25.2.2007, 17:13
Вот реальный пример, который мне нужно сделать:

Как достать все подкатегории из Категорий??

Раньше я всегда делал через циклы, а сейчас как это можно сделать? Желательно без буферизации??

каталог имеет такой вид:

TOP
один 
-раз
-два
-три

два
-раз
--разраз
-два
-три
--тритри

и т.п. То есть привычный каталог с бесконечными подкатегориями. Как сделать запрос на вывод всего???

Автор: Glip 25.2.2007, 22:29
мне кажется зависит от того как оно хранится и как должно отображаться

Автор: Рыжий 26.2.2007, 00:20
Glip, В БД есть поле parent_id в котором указывается родительский каталог.

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

Я видел как это делается рекурсией. Но этот подход в PDO без буферизации не сделать smile

Что подскажите?

Автор: mishaSL 26.2.2007, 14:17
Попробуй на основе этого сделать:
http://forum.vingrad.ru/index.php?showtopic=134803&view=findpost&p=1019477

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)