Mysql SELECT LEFT JOIN din alta baza de date cu PDO

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje:285

Mysql SELECT LEFT JOIN din alta baza de date cu PDO

Salutare,

Vreau sa aduc intr-un SELECT doua tabele din doua baze de date. Am urmatoarele conexiuni la BD, nu stiu cat de corect le-am facut, dar orice modificare e bine venita.
bd_cnx.php:

Cod: Selectaţi tot

<?php
//BD_1
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = BD_1';
$userdb = 'root';
$passdb = '';

// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
	$conn_BD_1 = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
	// set the PDO error mode to exception
    $conn_BD_1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	//echo 'Connected to database';
	/* Instructiuni de lucru cu $conn_BD_1 */
}
catch(PDOException $e) {
	echo "Connection failed: " . $e->getMessage();
}
?>

<?php
//BD_2

// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'BD_2';
$userdb = 'root';
$passdb = '';

// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
	$conn_BD_2 = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
	// set the PDO error mode to exception
    $conn_BD_2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	//echo 'Connected to database';
	/* Instructiuni de lucru cu $conn_BD_2 */
}
catch(PDOException $e) {
	echo "Connection failed: " . $e->getMessage();
}

?>

get_val.php:

Cod: Selectaţi tot

include 'bd_cnx.php';
$sql = "SELECT 	users.NUME,
                  	users.PRENUME,
                  	ROUND(AVG (catalog.NOTA),1) AS MEDIE
          FROM catalog
        
          LEFT JOIN catalog
          ON catalog.ID = catalog.ID_CHESTIONAR
        
          LEFT JOIN users
          ON users.ID = catalog.ID_USERS

          WHERE ID_CHESTIONAR = 1

          GROUP BY catalog.ID_USERS
          ORDER BY MEDIE DESC";
          
// Executa interogarea si retine datele returnate
$stmt = $conn_BD_1->query($sql);

// Daca select-ul e facut cu succes ($stmt nu e false)
if($stmt !== false) {
  // Se parcurg si afiseaza datele selectate
  foreach($stmt as $row) {
    echo "$row['NUME']";
  }
}
else {
  echo "0 results";
}

$conn_BD_1 = null; // Inchidere conexiune
$conn_BD_2 = null; // Inchidere conexiune
tabela users face parte din BD_1, iar tabela catalog din BD_2.
Nu stiu cum sa fac aceasta variabila $stmt sa aduca valori din ambele baze de date.
Multumesc!

MarPlo Mesaje:4343
Salut
Daca ai access de conectare la ambele baze de date cu acelasi user si parola, poti prelua date din tabelul din a doua baza de date cu aceeasi conexiune facuta pentru prima baza de date. Doar sa specifici bazele de date in interogarea sql.
Uite un exemplu din care se poate intelege metoda:

Cod: Selectaţi tot

// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb ='localhost';
$namedb ='db1';
$userdb ='root';
$passdb ='';

// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
  $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  //echo 'Connected to database';
}
catch(PDOException $e) {
  echo "Connection failed: ". $e->getMessage();
}

$sql ="SELECT t1.id, t1.name, t2.col_db2 FROM db1.table1 AS t1
 LEFT JOIN db2.table2 AS t2 ON t1.id = t2.id";
$stmt = $conn->query($sql);

// Daca select-ul e facut cu succes ($stmt nu e false)
if($stmt !== false) {
  // Se parcurg si afiseaza datele selectate
  foreach($stmt as $row) {
    echo $row['id'] .'--'. $row['name'] .'--'. $row['col_db2'] .'<br>';
  }
}
else {
  echo '0 results';
}

sterica Mesaje:285
functioneaza, multumesc mult de ajutor!

Subiecte similare