Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PDO: как обойтись без вложенного SELECT?
 
 автор: pavluxa09   (20.09.2011 в 10:09)   письмо автору
 
 

Имеется две таблицы :

CREATE TABLE IF NOT EXISTS `XMembers` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(129) NOT NULL,
  `firstName` varchar(20) NOT NULL,
  `secondName` varchar(20) NOT NULL
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

И

CREATE TABLE IF NOT EXISTS `XAuctionBets` (
  `playerID` int(11) NOT NULL,
  `amount` decimal(11,2) NOT NULL,
  `date` datetime NOT NULL,
  KEY `playerID` (`playerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

При помощи класса PDO мне нужно получить массив из данных вида:

array( 
       array( ID, email, firstname, secondName, bets = array( поля с таблицы XAuctionBets с нужным playerID )                                                                         
);


Можно поступить так:

$resultArray = $db->query("SELECT * FROM `XMembers`")->fetchAll( PDO::FETCH_ASSOC );
for( $i = 0; $i < count( $resultArray ); $i++ ) {
     $resultArray[$i]['bets'] = $db->query("SELECT * FROM `XAuctionBets` WHERE `playerID` = ".$resultArray[$i]['ID'] )->fetchAll( PDO::FETCH_ASSOC );
}
print_r( $resultArray );

Но в данном варианте у нас в цикле постояннно выполняется запрос SELECT, и при большом количестве записей в таблице XMembers будет сжираться много ресурсов.
Пожалуйста, предложите самый оптимальный вариант решения такой задачи!

ПРИ ЭТОМ НУЖНО УЧЕСТЬ, ЧТО В ТАБЛИЦЕ XMembers ID ИЗ ТАБЛИЦЫ XAuctionBets может не существовать, в таком случае все поля должны быть равны нулю

  Ответить  
 
 автор: pavluxa09   (05.10.2011 в 01:58)   письмо автору
 
   для: pavluxa09   (20.09.2011 в 10:09)
 

UP

  Ответить  
 
 автор: admiral   (05.10.2011 в 03:41)   письмо автору
 
   для: pavluxa09   (05.10.2011 в 01:58)
 

$resultArray = $db->query("SELECT * FROM `XMembers` LEFT JOIN XMembers ON XMembers.ID = XAuctionBets.playerID")->fetchAll( PDO::FETCH_ASSOC );

  Ответить  
 
 автор: pavluxa09   (06.10.2011 в 00:31)   письмо автору
 
   для: admiral   (05.10.2011 в 03:41)
 

Respekt!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования