Select em duas tabelas cada uma em uma base de dados

05/05/2024

0

Olá pessoal,

Estou tentando dar select em duas tabelas que estão em bases de dados diferentes na mesma instância.
Tentei fazer da forma abaixo mas não retorna nada. Os selects quando rodados sozinhos retornos os valores corretos. a Uniõ que não consigo fazer.
Podem me ajudar?

$conn1 = mysqli_connect(DB_1, DB_USERNAME1, DB_PASSWORD1);
if (mysqli_connect_errno()) echo "Falha ao conectar a Base de Dados: Acesse mais tarde: " . mysqli_connect_error();
$db1 = mysqli_select_db($conn1, DB_DATABASE1);

$conn2 = mysqli_connect(DB_2, DB_USERNAME2, DB_PASSWORD2);
if (mysqli_connect_errno()) echo "Falha ao conectar a Base de Dados: Acesse mais tarde: " . mysqli_connect_error();
$db2 = mysqli_select_db($conn2, DB_DATABASE2);

$sql = "SELECT DB_DATABASE1.tabela1.id, DB_DATABASE1.tabela1.id_user, DB_DATABASE1.tabela1.titulo, DB_DATABASE2.tabela2.nome ";
$sql .= " FROM DB_DATABASE1.tabela1, DB_DATABASE2.tabela2 WHERE DB_DATABASE2.tabela2.id = DB_DATABASE1.tabela1.id_user";

$query = mysqli_query($conn1,$sql);

while($row = mysqli_fetch_assoc($query)){
$titulo = $row['titulo'];
$nome = $row['nome'];

echo"::$titulo::$nome::<BR>";
}

Valeu pessoal
Arakan
Giovani Arakan

Giovani Arakan

Responder

Posts

06/05/2024

Arthur Heinrich

Quando temos múltiplos databases em uma mesma instância, podemos fazer referências diretas às tabelas, como em "from database1.tabela1, database2.tabela2...". Porém, através de uma única conexão, e o usuário utilizado para conectar ao banco precisa ter permissão de acessar ambas as tabelas.

Bancos de dados como serviços, que geralmente são acessados por um usuário e senha específico para cada database, não possuindo acesso nos objetos do outro database/usuário, não permitem este tipo de abordagem.

Antigamente, quando se utilizava o BDE, era possível efetuar um join entre tabelas de diferentes databases. Porém, isso exigia retornar os dados de cada um dos databases para a máquina local, onde é executado o programa, e o join era executado pelo BDE e não pelo banco, o que não era tão eficiente assim.

SELECT Customer.CustNo, Orders.OrderNo
FROM ":Oracle1:CUSTOMER"
  JOIN ":Sybase1:ORDERS"
    ON (Customer.CustNo = Orders.CustNo)
WHERE (Customer.CustNo = 1503)


Aparentemente o FireDAC também aceita este tipo de "Heterogeneous Queries". Dê uma olhada em: https://docwiki.embarcadero.com/RADStudio/Athens/en/Local_SQL_(FireDAC)

É necessário utilizar uma conexão do tipo SQLite para simular o mesmo efeito.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar