Intereting Posts

Как вы присоединяетесь к двум объектам PDO в одном и том же цикле foreach?

Простите меня, потому что я новичок в PDO. Я не уверен, есть ли простое решение. Я искал в Интернете какое-то время и еще не нашел ответа.

У меня есть две разные базы данных, к которым я подключаюсь.

try { $db1= new PDO( "sqlsrv:server=$server;Database = $dbname", $uid, $pwd); $db2= new PDO( "sqlsrv:server=$server;Database = $db2name", $db2uid, $pwd); } 

Я пытаюсь объединить информацию из таблицы в каждой базе данных на основе общего идентификатора. Мне нужно просмотреть информацию для печати списка.

 $sql= "SELECT tableA.name, tableB.messages FROM tableA INNER JOIN tableB ON tableA.id = tableB.id"; foreach ($db1->query($sql) as $row) { //HOW CAN I QUERY DB2?? $id = $row['id']; $name = $row['name']; $msg= $row['messages']; echo $name . "etc..."; } 

Как я могу изменить этот код, чтобы запросить оба PDO, чтобы он мог распечатывать результаты в одном и том же цикле foreach?

EDIT: Я пытаюсь сопоставить ID в таблице A с идентификатором в таблицеB, а затем распечатать поле имени в таблицеA рядом с полем msg в таблицеB, когда совпадают идентификаторы.

Представим себе (поскольку вы не предоставляете нам свою схему БД), что у вас есть db1 со столом

 Db1table id_1 name_1 message_1 

и db2 со столом

 Db2table id_2 name_2 message_2 

И каждый id_1 ссылается на общий соответствующий id_2, например array('id_1'=>1, 'name_1'=>'smth', 'message_1'=>'smth') должен быть соединен с array('id_2'=>1, 'name_2'=>'smth', 'message_2'=>'smth') (как вы видите, id_1 == id_2).

Итак, вам нужен код:

 # make a "indexed" hash by common id column for fast access $hash_by_id=array(); foreach($db2->query($sql2) as $row2){ $hash_by_id[$row2['id_2']]=$row2; } foreach($db1->query($sql1) as $row1){ $joined_row2=$hash_by_id[$row1['id_1']]; #pseudo-join echo $joined_row2['id_2']==$row1['id_1'] # true # from db1 echo $joined_row2['id_2']; echo $joined_row2['name_2']; echo $joined_row2['message_2']; # from db2 echo $row1['id_1']; echo $row1['name_1']; echo $row1['message_1']; } 

Не запрашивать внутри условия foreach . Сначала отправьте запрос и присоедините результаты:

 // Assuming your two queries are $sql1 and $sql2 // Unless both connections use the same SQL statement... $res1 = $db1->query($sql1); $res2 = $db2->query($sql2); $results = array_merge($res1, $res2); foreach ($results as $row) { // echo the results }