Foros del Web » Programando para Internet » PHP »

consultar 2 bases de datos diferentes usuarios

Estas en el tema de consultar 2 bases de datos diferentes usuarios en el foro de PHP en Foros del Web. Hola a todos, me he topado con un nuevo problema, tengo que hacer una consulta relacionada (join) de 2 tablas en 2 bases de datos ...
  #1 (permalink)  
Antiguo 28/11/2002, 08:17
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 15 años, 3 meses
Puntos: 4
Pregunta consultar 2 bases de datos diferentes usuarios

Hola a todos, me he topado con un nuevo problema, tengo que hacer una consulta relacionada (join) de 2 tablas en 2 bases de datos (MySQL) distintas, pero el problema radica en que cada base de datos tiene un usuario y contraseña diferente aunque ambas están el localhost.

no puedo controlar los permisos de los usuarios.

Estoy buscando la forma de solucionarlo haciendo 2 queries diferentes, guardando los resultados en un array y luego usando este array "como si fuera el resultado de mysql_fetch_array()" pero me enredo demasiado...


Cómo lo solucionarian ustedes?
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #2 (permalink)  
Antiguo 28/11/2002, 08:31
Avatar de joseisrael  
Fecha de Ingreso: noviembre-2002
Ubicación: Maracay, Edo. Aragua
Mensajes: 221
Antigüedad: 15 años
Puntos: 1
Pregunta Funcionamiento

Saludos.

Te estas conectando a las DB con conexiones directas en cada documento php o tienes algún archivo de conexión el cual llamas dentro de cada documento php???

Si existe ese documento, debes crear otro con las propiedades de tu otra DB.

Ten cuidado con el nombre de las variables en ambos archivos.


Si no existe ese documento maestro, tienes que conectarte a la otra DB como lo vienes haciendo ya.

La única diferencia serían los datos de acceso.

Lo que estas haciendo de manejar la consulta de una DB con la respuesta de la otra esta perfecto.

Trata de manejar variables que controlen las respuestas de tu consulta, para que te sea sencillo utilizarls dentro de tus querys secundarios.

Suerte
  #3 (permalink)  
Antiguo 28/11/2002, 09:26
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 15 años, 3 meses
Puntos: 4
Gracias por tu comentario joseisrael.

El problema comenzó aqui:
Código:
$sql = "select ped.*, ser.referencias_serv, lug.desc_lugar from travel.pedidos as ped ";
$sql.= "left join servicios as ser on (ped.id_serv=ser.id_serv) ";
$sql.= "left join lugares as lug on (ser.id_lugar=lug.id_lugar) ";
$sql.= "where (ped.id_cliente='$id') and (ped.inactivo='') ";
$qped = mysql_query($sql,$dblink1);
donde $dblink se refiere a una base de datos y travel se refiere a otra que también está abierta pero con otro usuario y contraseña, supongo que si alguien inventara un:
$qped = mysql_query($sql,$dblink1,$dblink2);
todo se solucionaria

P.D.: El mensaje de error de mysql seria acceso denegado al uysuario xx a base de datos travel. En otro servidor tenia un usuario para varias bases de datos y funcionó perfectamente, pero el servidor en que está alojado ahora sólo permite 1 usuario para cada base de datos.

Nuevamente pregunto: Cómo lo solucionaria ustedes?
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #4 (permalink)  
Antiguo 28/11/2002, 15:03
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Pues creo que si no puedes pasar la tabla de una BD a la otra, la unica solucion que te queda seria con dos consultas. Primero haces la consulta de la BD travel con su link. La consulta seria:

select * from pedidos where (id_cliente='$id') and (inactivo='')

Luego almacenas el resultado en un array bidimensional asociativo (vaya nombrecito me he inventado). Quizas queda mas claro con un poco de codigo:
Código PHP:
while ($row=mysql_fetch_assoc($result))
{
     
$indice=$row['campo_indice']
     
$lista_id_serv.=','.$row['id_serv'];
     foreach (
$row as $campo => $valor)
     {
     
$con_travel[$indice][$campo]=$valor;
     }
}
$lista_id_serv=substr($lista_id_serv,1); 
Con esto tenemos en $con_travel el resultado de la consulta de travel. Y en $lista_id_serv, pues lo que su nombre indica. Luego veremos su uso.

Ahora toca hacer la segunda consulta, con su link correspondiente. La consulta seria:

"select ser.id_serv, ser.referencias_serv, lug.desc_lugar from servicios as ser left join lugares as lug on (ser.id_lugar=lug.id_lugar) where ser.id_serv in ($lista_id_serv)";

¿Y como accedemos a cada registro como si seria una sola consulta? Pues hacemos otro array bidimensional asociativo con esta segunda consulta (dejo este codigo como ejercicio, pero usad id_serv como indice) y usar el valor del campo id_serv del array $con_travel como indice de este segundo array. Seria algo asi:
Código PHP:
foreach ($con_travel as $registro)
{
    
$id_serv=$registro['id_serv'];
    echo 
$id_serv;
    echo ...; 
// el resto de campos de travel
    
echo $con_no_travel[$id_serv]['id_serv'];
   echo 
$con_no_travel[$id_serv]['otro_campo'];
   echo ...; 
// el resto de campos de la sesegunda consulta

Por supuesto, no he probado el codigo. Lo he hecho ahra de cabeza, asi que puede haber errores de sintaxis, falta control de errores y demas, pero puede ser un buen comienzo para trabajar.

Suerte. Y me comentas si te ha servido para algo.

P.D.: Por supuesto, si no conoces alguna funcion, mirala en el manual.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 28/11/2002, 15:47
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 15 años, 3 meses
Puntos: 4
Gracias Josemi, efectivamente no conozco la función mysql_fetch_assoc() voy a verlo en el manual, hago la prueba y luego te digo como quedó.
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:28.