|
|
|
| Имеется две таблицы :
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
(20.09.2011 в 10:09)
| | UP | |
|
|
|
|
|
|
|
для: pavluxa09
(05.10.2011 в 01:58)
| | $resultArray = $db->query("SELECT * FROM `XMembers` LEFT JOIN XMembers ON XMembers.ID = XAuctionBets.playerID")->fetchAll( PDO::FETCH_ASSOC ); | |
|
|
|
|
|
|
|
для: admiral
(05.10.2011 в 03:41)
| | Respekt! | |
|
|
|