SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: neorent en Miércoles 16 de Mayo de 2007, 19:09

Título: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: neorent en Miércoles 16 de Mayo de 2007, 19:09
hola estimado aqui haciendo muchas consultas.

   como puedo hacer una consulta a dos tablas y que si un cosa se encuentra en ambas me diga ok y si no me diga no corresponde, no se mucho de esto pero igual les dejo la inquetud mia igual buscare algo a ver que encuentro,
saludos y gracias,
neo.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: Mollense en Miércoles 16 de Mayo de 2007, 22:57
Estás en el foro incorrecto. Tu duda es de SQL.-
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: ArKaNtOs en Jueves 17 de Mayo de 2007, 06:06
no seria tan facil que hicieras una consulta en una tabla primero y verificara si el dato que buscas lo encontro, sino fue asi busque en la otra?? lol  :scream:
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: F_Tanori en Jueves 17 de Mayo de 2007, 07:56
Tambien hay unas instrucciones en SQL

esta:
Exists (http://www.google.com.mx/search?hl=es&q=SQL+EXISTS&btnG=Buscar+con+Google&meta=) tambien esta  
IN (http://www.google.com.mx/search?hl=es&q=SQL+IN&btnG=B%C3%BAsqueda&meta=)

te puede ser de utilidad, Apoyandote en subconsultas tambien

Saludos
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: ArKaNtOs en Jueves 17 de Mayo de 2007, 15:51
Es cierto olvidaba las subconsultas :P sorry :whistling:
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: Altareum en Jueves 17 de Mayo de 2007, 16:45
Con esto buscas las coincidencias entre ambas tablas

Citar
SELECT * FROM tabla1
INNER JOIN tabla2 ON ( tabla1.columna1 = tabla2.columna2 )


Altareum.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: ibito en Jueves 17 de Mayo de 2007, 17:54
Cita de: "Altareum"
Con esto buscas las coincidencias entre ambas tablas

Citar
SELECT * FROM tabla1
INNER JOIN tabla2 ON ( tabla1.columna1 = tabla2.columna2 )


Altareum.
Pero a lo que entendí, quiere saber si está en una tabla o en las 2, con eso solo ves si existe en las 2.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: neorent en Viernes 18 de Mayo de 2007, 15:34
hola que tal gracias a todos por su ayuda, y bueno aun creo que no encontre bien mi solucion, espero hacerlo pront pero mas o menos ya tengo la idea gracias,
saludos,
neo.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: Altareum en Viernes 18 de Mayo de 2007, 16:21
Citar
que si un cosa se encuentra en ambas me diga ok

Por lo que entendí, es si está en ambas tablas, no en una y luego en otra...

En todo caso neorent, da un ejemplo de los datos que tienes, y qué resultado necesitas.

Altareum
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: neorent en Viernes 18 de Mayo de 2007, 16:51
Estimado Altareum:

tengo dos tablas
tabla1(1000 registros)
tabla2(1 registro)
cada una contiene diferentes campos pero solo hay 2 que son iguales en ambas tablas

tabla1.username
tabla1.pass

tabla2.username
tabla2.pass

cuando ingrese un usuario a la pagina y le solicite el nombre de usuario y password devera verificar en las tablas 1 y 2 si el usuario se encuantra, de no encontrarse en la tabla2 debe ser dirigido a una pagina x de no encontrarse en la tabla1 debe ser reenviado al idex del sitio nuevamente pidiendo usuario y password y si estuviese en ambas tablas mandarlo a otra pagina por ejemplo portal.php tengo un code pero no creo que este funcionando bien espero me puedan ayudar,
saludos,
neo.
Código: Text
  1.  
  2. $conn = mysql_connect("localhost", "root", "");
  3. mysql_select_db("internet_db",$conn);
  4. $ssql = "SELECT * FROM usuarios WHERE nombre='$usuario' and passw='$clave'";
  5. $sql="SELECT * FROM inscrito WHERE username='$usuario' and clave='$clave'";
  6. $rs = mysql_query($ssql,$conn);
  7. $rs2= mysql_query($sql, $conn);
  8. if (mysql_num_rows($rs)!=0)
  9.   {
  10.       $autentificado = "SI";
  11.     if (mysql_num_rows($rs2)!=0)
  12.       {
  13.         echo "<script> top.location.href='inscripcion.php'; </script>";
  14.       }
  15.     else
  16.       {
  17.       echo "<script> top.location.href='portal.php'; </script>";
  18.       }
  19.   }
  20. else
  21.   {
  22.     $autentificado = "NO";
  23.     echo "<script> top.location.href='index.php'; </script>";
  24.   }
  25.  
  26.  
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: Altareum en Lunes 21 de Mayo de 2007, 17:12
Citar
SELECT tabla1.username,  tabla2.username
FROM tabla1
LEFT JOIN tabla2 ON ( tabla1.username = tabla2.username )
WHERE tabla1.username = "$usuario" AND tabla1.pass = "$clave"

De esta forma, si no hay registros en tabla 2 el segundo campo traerá NULL, y si no existe en tabla 1 no dará resultados.

Asumo que las claves en ambas tablas son la misma, o mejor dicho, que los registros son de tabla2 corresponden al mismo usuario que en tabla1, sin necesidad de chequear que las claves sean iguales, en todo caso, usa esto:
Citar
LEFT JOIN tabla2 ON ( tabla1.username = tabla2.username AND tabla1.pass = tabla2.pass )

Altareum.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: neorent en Martes 22 de Mayo de 2007, 16:40
Altareum:

muchas gracias por tu ayuda y guia bueno yo hice lo siguiente y quisiera saber pk me da el siguiente error este es el code:

Código: Text
  1.  
  2. <?php
  3. $usuario=$_POST['usuario'];
  4. $clave=$_POST['clave'];
  5. echo"$usuario, $clave";
  6.  
  7. $conn = mysql_connect("localhost", "root", "");
  8. mysql_select_db("internet_db",$conn);
  9. $ssql = "SELECT * FROM usuario WHERE nombre='$usuario' and passw='$clave'";
  10. $sql="SELECT * FROM inscrito WHERE username='$usuario' and clave='$clave'";
  11. $rs = mysql_query($ssql,$conn);
  12. $rs2= mysql_query($sql, $conn);
  13. if (mysql_num_rows($rs)!=0)
  14.   {
  15.       $autentificado = "SI";
  16.     if (mysql_num_rows($rs2)!=0)
  17.       {
  18.         echo "<script> top.location.href='portal/index.php'; </script>";
  19.       }
  20.     else
  21.       {
  22.       echo "<script> top.location.href='inscripcion.php?user=$usuario&pass=$clave'; </script>";
  23.       }
  24.   }
  25. else
  26.   {
  27.     $autentificado = "NO";
  28.     echo "<script> top.location.href='index.php'; </script>";
  29.   }
  30. mysql_free_result($rs);
  31. mysql_close($conn);
  32. ?>
  33.  
  34.  

y me da el siguiente error:
Código: Text
  1.  
  2. user, pass
  3. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\easyphp1-8\www\validar.php on line 13
  4.  
  5.  

me podrian ayudar nuevamente a ver en que estoy mal?, gracias,
saludos,
neo.
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: F_Tanori en Martes 22 de Mayo de 2007, 18:42
lo que pasa es que $rs no es un Resultset valido la consulta no te esta devolviendo resultados

yo lo haria de esta manera:

Código: Text
  1. SELECT u.* ,(SELECT i.usuario FROM inscritos i where i.usuario=u.usuario) EnTabla2 FROM usuarios u WHERE u.usuario='$usuario'
  2.  


si el campo 'EnTabla2' devuelve NULL es que no esta en la tabla 2, si la consulta no devulve registros no esta en la Tabla 1

aunque supongo que si no esta en la tabla 1 no esta en la 2  :unsure: :P


yo te aconsejo que no busques las contraseñas a traves de SQL

Código: Text
  1. "SELECT * FROM usuario WHERE nombre='$usuario' and passw='$clave'";
  2.  

Mejor toma  el resultado y compara aparte...


Código: Text
  1. $rs = mysql_query("SELECT nombre,password FROM usuario WHERE nombre='$usuario'",$conn);
  2. $pass=mysql_fetch_row($rs);
  3. $pass=$pass[1]
  4.  
  5. if ($pass[1] == $clave)
  6.   {
  7.    .....
  8.   }
  9.  
  10.  

Saludos
Título: Re: Consultar En Dos Tablas Al Mismo Tiempo
Publicado por: neorent en Martes 22 de Mayo de 2007, 20:57
estimados todos debo un gran disculpa

el error era que consultaba en la tabla usuario y realmente era usuarios pero bueno son cosas que pasan y agradesco la ayuda de todos ustedes muchisimas gracias se pasaron,
saludos,
neo.