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
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](https://www.devmedia.com.br/imagens/fotoscolunistas/avatar/avatar-5.png)
Giovani Arakan
Curtir tópico
+ 0
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.
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.
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
Clique aqui para fazer login e interagir na Comunidade :)