Foros del Web » Programando para Internet » PHP »

Busqueda en 3 tablas no relacionadas

Estas en el tema de Busqueda en 3 tablas no relacionadas en el foro de PHP en Foros del Web. Quería saber si hay alguna forma de hacer una búsqueda en 3 tablas distintas no relacionadas entre si por ningún campo. Bueno eso de que ...

  #1 (permalink)  
Antiguo 30/03/2009, 01:13
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Busqueda en 3 tablas no relacionadas

Quería saber si hay alguna forma de hacer una búsqueda en 3 tablas distintas no relacionadas entre si por ningún campo.

Bueno eso de que no están relacionadas no es del todo correcto...

Tenemos 3 tablas cuyo único campo en común es "email", sin embargo dicho campo no puede tener el mismo valor en distintas tablas, es decir que es un valor único. Por lo que a la hora de hacer la búsqueda no solo interesa saber si ha encontrado una coincidencia o cero, sino lo que es más importante de que tabla proviene esa coincidencia.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por GatorV; 31/03/2009 a las 11:06
  #2 (permalink)  
Antiguo 30/03/2009, 05:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Busqueda en 3 tablas no relacionadas

si no están relacionadas entre sí, pero tienen una estructura semejante de campos, puedes usar UNION ALL
  #3 (permalink)  
Antiguo 30/03/2009, 11:27
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Cita:
Iniciado por jurena Ver Mensaje
si no están relacionadas entre sí, pero tienen una estructura semejante de campos, puedes usar UNION ALL
Según tengo entendido UNION ALL lo que hace es devolver todos los datos que coincidan con el select y lo que estoy buscando es algo que simplifique esto:

Código PHP:
<?php 
//Comprobar datos en la BD:
        
$consulta1 mysql_query("select * from jugadores where Email='$user_mail' and Pass='$user_pass'"); 
        
$filas1 mysql_num_rows($consulta1)
        if ( 
$filas1 == //No es un jugador.
        
{
            
$consulta2 mysql_query("select * from arbitros where Email='$user_mail' and Pass='$user_pass'");
            
$filas2 mysql_num_rows($consulta2);
            if ( 
$filas2 == //No es un arbitro
            
{
                
$consulta3 mysql_query("select * from directivos where Email='$user_mail' and Pass='$user_pass'");
                
$filas3 mysql_num_rows($consulta3);
                if ( 
$filas3 != // ES un directivo
                
{    
                    
$t_usuario "DIRECTIVO";
                }
                else 
//No ha encontrado resultados coincidentes en la BD.
                

                    
$errores_identificacion[] = "Tu email o contraseña son incorrectos.";            
                }
            }
            else {
$t_usuario "ARBITRO";}
        }
        else {
$t_usuario "JUGADOR";}
?>
No veo de que forma podría aplicarse en este caso o reducir las 3 consultas a 1 sola.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #4 (permalink)  
Antiguo 30/03/2009, 14:08
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Busqueda en 3 tablas no relacionadas

Hola Dude--

Pero al menos intentaste hacer union?? qué te arroja?

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 30/03/2009, 18:19
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Cita:
Iniciado por Carxl Ver Mensaje
Hola Dude--

Pero al menos intentaste hacer union?? qué te arroja?

Saludos
Si hago esta consulta:
Código:
(SELECT * FROM JUGADORES WHERE Email="[email protected]" AND Pass="12345") 
UNION ALL 
(SELECT * FROM ARBITROS WHERE Email="[email protected]" AND Pass="12345") 
UNION ALL 
(SELECT * FROM DIRECTIVOS WHERE Email="[email protected]" AND Pass="12345")
Me devuelve el siguiente error:

MySQL ha dicho: Documentación
#1222 - The used SELECT statements have a different number of columns

No se a que columnas se refiere, si a los atributos de cada select, si a las devueltas o a las que tiene cada tabla, si fuera este último caso obviamente son distintas porque cada tabla representa un tipo de persona distinto.

Sigo sin ver de que manera UNION ALL puede ayudarme a reducir el número de consultas de mi código o a simplificarlo.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 30/03/2009 a las 19:03
  #6 (permalink)  
Antiguo 30/03/2009, 19:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Cita:
<?php
//Comprobar datos en la BD:
$consulta1 = mysql_query("select * from jugadores where Email='$user_mail' and Pass='$user_pass'");
$filas1 = mysql_num_rows($consulta1)
if ( $filas1 == 0 ) //No es un jugador.
{
$consulta2 = mysql_query("select * from arbitros where Email='$user_mail' and Pass='$user_pass'");
$filas2 = mysql_num_rows($consulta2);
if ( $filas2 == 0 ) //No es un arbitro
{
$consulta3 = mysql_query("select * from directivos where Email='$user_mail' and Pass='$user_pass'");
$filas3 = mysql_num_rows($consulta3);
if ( $filas3 != 0 ) // ES un directivo
{
$t_usuario = "DIRECTIVO";
}
else //No ha encontrado resultados coincidentes en la BD.
{
$errores_identificacion[] = "Tu email o contraseña son incorrectos.";
}
}
else {$t_usuario = "ARBITRO";}
}
else {$t_usuario = "JUGADOR";}
?>
Por lo que veo solo necesitas comparar el numero de registros para categorizar una persona, si es jugador, arbitro o directivo.

Creo que asi, puedes obtener la salida que obtienes al final de tu codigo (jugador, arbitro o directivo.)

Código mysql:
Ver original
  1. select if((select count(*) from jugadores where Email='$user_mail' and Pass='$user_pass')=0,if((select count(*) from arbitros where Email='$user_mail' and Pass='$user_pass')=0,if
  2. ((select count(*) from directivos where Email='$user_mail' and Pass='$user_pass')<>0,'directivo','Email o contraseña incorrectos'),'arbitro'),'jugador') as persona;

Un saludo, espero te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 30/03/2009 a las 20:17
  #7 (permalink)  
Antiguo 30/03/2009, 19:19
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Busqueda en 3 tablas no relacionadas

Hola huesos52, cómo vamos?

Podrías explicarme un poco el query que hiciste??

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 30/03/2009, 19:27
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Claro carxl.

Observa en el codigo php de dude que solo realiza la consulta para establecer el numero de registros de cada consulta. Por esta razón se puede simular mediante sql este mismo fenomeno haciendo uso de la función count.

El if en mysql se comporta asi: if(condicion,'si es cierto','si es falso')

Para este caso se requiere de 3 condiciones:
(SELECT count(*) FROM jugadores WHERE Email='$user_mail' AND Pass='$user_pass')=0
Esta sería la primera condición. Dentro del parametro 'si es cierto' realizamos la segunda condición que sería:
(SELECT count(*) FROM arbitros WHERE Email='$user_mail' AND Pass='$user_pass')=0
Esta a su vez, tambien requiere de otro if anidado para una tercera condición:
(SELECT count(*) FROM directivos WHERE Email='$user_mail' AND Pass='$user_pass')<>0
Cuando se completan las condiciones, solo queda empezar a cerrarlas en el orden jerarquico como fueron abiertas.

Espero haber sido claro.

Un saludo carxl, jurena y dude.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 30/03/2009, 20:20
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Huesos pinta muy bien tu aportación, no sabía que se podían hacer if() dentro de consultas SQL, lo que no entiendo es porque me da error de sintaxis al hacer la consulta con tu código y mira que lo he revisado veces pero no encuentro el error :S
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #10 (permalink)  
Antiguo 30/03/2009, 20:24
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Busqueda en 3 tablas no relacionadas

Chimba, chimba man

Gracias por el dato!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #11 (permalink)  
Antiguo 30/03/2009, 20:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Revisa como ingresas los campos email y password. te los puse como variables php, pero ensayalos con variables reales desde consola. después miras como adaptas las variables a tu consulta desde php.

A mi me funciona con 3 tablas que tengo creadas.

Espero te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 30/03/2009, 20:30
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Cita:
Iniciado por huesos52 Ver Mensaje
Revisa como ingresas los campos email y password. te los puse como variables php, pero ensayalos con variables reales desde consola. después miras como adaptas las variables a tu consulta desde php.

A mi me funciona con 3 tablas que tengo creadas.

Espero te sirva.
Lo único que hice fue reemplazar las variables $user_mail y $user_pass por los datos de un usuario de la bd, respetando las comillas, no hice ninguna otra modificación. Tal cual quedó lo metí en las consultas SQL de phpmyadmin para probarlo y ya conoces el resultado.

Uso la versión 4.0.27 de mysql, no se si tendrá algo que ver.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 30/03/2009 a las 20:41
  #13 (permalink)  
Antiguo 30/03/2009, 20:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

En donde te señala el error de sintaxis?
La acabo de ensayar nuevamente y me funciona bien.

Los parentesis y la estructura de los ifs están funcionando en mi server.

Cita:
Uso la versión 4.0.27 de mysql, no se si tendrá algo que ver.
La versión 4 soporta sentencias if.

PD: De nada compatriota carxl
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #14 (permalink)  
Antiguo 30/03/2009, 20:44
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Cita:
Iniciado por huesos52 Ver Mensaje
En donde te señala el error de sintaxis?
La acabo de ensayar nuevamente y me funciona bien.

Los parentesis y la estructura de los ifs están funcionando en mi server.

PD: De nada compatriota carxl
Pues no da mucha info al respecto:

MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT count( * ) FROM jugadores WHERE Email = 'emaildeljugador@hot

y ahí se corta, ni siquiera muestra el campo email completo.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #15 (permalink)  
Antiguo 30/03/2009, 20:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

vamos a hacer varias pruebas.

quita toda la parte del where de las 3 consultas. que quede asi:

Código sql:
Ver original
  1. SELECT IF((SELECT COUNT(*) FROM jugadores)=0,IF((SELECT COUNT(*) FROM arbitros)=0,IF
  2. ((SELECT COUNT(*) FROM directivos)<>0,'directivo','Email o contraseña incorrectos'),'arbitro'),'jugador') AS persona;

Pruebalo con el count de otras tablas en tu bd de las cuales sepas el numero de registros.

Cuentanos como te va.

Dude y no creo que tenga que ver la version de mysql. Para la versión 3.23 ay soportaba if
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #16 (permalink)  
Antiguo 30/03/2009, 21:01
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

A ver, cada tabla solo tiene un registro, diferente al de las otras, lo metí así para comprobar precisamente. A efectos de log-in y log-out funciona así que eso podemos descartarlo.

Si pruebo este otro código que me has sugerido sigue dando error de sintaxis.

Tomando esto que dijiste:
Cita:
Huesos52 dijo:
El if en mysql se comporta asi: if(condicion,'si es cierto','si es falso')
He simplificado aun más y he probado este otro:

Código:
SELECT if((SELECT count(*) FROM jugadores WHERE Email='[email protected]' AND Pass='12345')<>0,'jugador','Email o contraseña incorrectos') as persona;
Como se que esa consulta tiene los datos correctos y además es la tabla adecuada, debería dar count 1 es decir <> de 0 y por tanto devolverme que "persona" es igual a "jugador". Desgraciadamente también da error de sintaxis :(
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 30/03/2009 a las 21:07
  #17 (permalink)  
Antiguo 30/03/2009, 21:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Dude

Creo que la versión que tienes no soporta subconsultas.

ese debe ser el problema. :( lo siento
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #18 (permalink)  
Antiguo 30/03/2009, 21:14
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

No importa, tenía que actualizar tarde o temprano, hablare con mi host para que de paso me updateen php y ya te contaré si era eso ;)
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 30/03/2009 a las 22:19
  #19 (permalink)  
Antiguo 30/03/2009, 22:57
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

He actualizado la versión mysql y ya puedo utilizar tu sugerencia, solo quería notificar que ese era el problema por si alguien consulta este post en el futuro ;).
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 31/03/2009 a las 07:23
  #20 (permalink)  
Antiguo 30/03/2009, 23:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Busqueda en 3 tablas no relacionadas

Un truco, dude--
Observa esto. Uso un valor absoluto con el nombre de cada tabla en cada select del union. Con ello obtengo un campo llamado tipo donde se encuentra el nombre de la tabla. Esto puedes usarlo con tu versión de MySQL. Luego sólo tendrás que mostrar el dato del que aparezca. Pruébala aunque sea con la nueva versión de MySQL.

(SELECT 'arbitros' as tipo, user, pass FROM `arbitros` WHERE user = 'arbitro1' and pass = 'a1')
union all
(SELECT 'jugadores' as tipo, user, pass FROM `jugadores` WHERE user = 'arbitro1' and pass = 'a1')
union all
(SELECT 'directivos' as tipo, user, pass FROM `directivos` WHERE user = 'arbitro1' and pass = 'a1')

amigos, saludos a los tres
  #21 (permalink)  
Antiguo 31/03/2009, 11:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Busqueda en 3 tablas no relacionadas

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #22 (permalink)  
Antiguo 20/04/2009, 09:10
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Bien un nuevo problema que me esta llevando por la calle de la amargura.

Hay 3 tablas, cuya estructura es la siguiente:

nivel1:
email
Pass
DNI

nivel2:
email
Pass
CIF

nivel3:
email
Pass
CIF

El usuario introduce mediante un formulario los parámetros email y (DNI ó CIF), si estos son correctos se le debe devolver el Pass. Obviamente cuando un usuario introduce un email no sabemos a cual de las tres tablas puede corresponder, si es que existe en alguna de ellas, aunque tampoco nos importa saber en cual encuentra coincidencia, solo nos importa el hecho en si de que coincida o no y cual es el valor del campo Pass. Utilizando lo que creía haber aprendido en este post pretendía usar esta consulta:

Código php:
Ver original
  1. SELECT if( (
  2. SELECT Pass
  3. FROM nivel1
  4. WHERE Email = '[email protected]'
  5. AND DNI = '28823418z'
  6. ) =NULL, if( (
  7. SELECT Pass
  8. FROM nivel2
  9. WHERE Email = '525225'
  10. AND CIF = '252525'
  11. ) = NULL, if( (
  12. SELECT Pass
  13. FROM nivel3
  14. WHERE Email = '525252'
  15. AND CIF = '25252'
  16. ) <> NULL, Pass, 'los datos introducidos no son correctos' ) , Pass ) , Pass ) AS password

Para aclarar: Se supone que donde pone Pass la sentencia condicional SQL debería devolver el valor de la Pass si encuentra coincidencia de datos en esa tabla que esta mirando, con lo que el resultado de la consulta sería una tabla con cabecero: "Password" y el valor del mismo sería el valor de Pass o bien "los datos introducidos no son correctos'. Pero da error, obviamente porque la sintaxis que estoy utilizando seguramente no es la correcta o quizás porque el planteamiento de la solución no es el adecuado.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #23 (permalink)  
Antiguo 20/04/2009, 09:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Dude--

Estas utilizando bien la estructura de los ifs. Sin embargo, podría asegurar que el error te lo arroja cuando tratas de asignar pass como parametro de cualquier if.

En el ejemplo anterior, era sencillo, por que solo se requería una cadena de texto de salida (jugador, arbitro o directivos). En este caso, lo podrías hacer así (No lo he probado)

Código mysql:
Ver original
  1. SELECT Pass
  2. FROM nivel1
  3. AND DNI = '28823418z'
  4. )t1 =NULL, if( (
  5. SELECT Pass
  6. FROM nivel2
  7. WHERE Email = '525225'
  8. AND CIF = '252525'
  9. )t2 = NULL, if( (
  10. SELECT Pass
  11. FROM nivel3
  12. WHERE Email = '525252'
  13. AND CIF = '25252'
  14. )t3 <> NULL, t3.Pass, 'los datos introducidos no son correctos' ) , t2.Pass ) , t1.Pass ) AS password;

Pruebalo y nos cuentas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #24 (permalink)  
Antiguo 20/04/2009, 09:48
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Pues me devuelve nuestro antiguo amigo:
MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1 = NULL , if( ( SELECT Pass FROM nivel2 WHERE Email = '52 y ahí se corta...
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #25 (permalink)  
Antiguo 20/04/2009, 09:59
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Dude--
Ten en cuenta que un valor vacio no necesariamente es null. NULL es diferente de ' '.

Acabo de probar lo que te dije y no funciona. Pero pruebalo así:

Código mysql:
Ver original
  1. SELECT Pass
  2. FROM nivel1
  3. AND DNI = '28823418z'
  4. ) =NULL, if( (
  5. SELECT Pass
  6. FROM nivel2
  7. WHERE Email = '525225'
  8. AND CIF = '252525'
  9. ) = NULL, if( (
  10. SELECT Pass
  11. FROM nivel3
  12. WHERE Email = '525252'
  13. AND CIF = '25252'
  14. ) <> NULL, (
  15. SELECT Pass
  16. FROM nivel3
  17. WHERE Email = '525252'
  18. AND CIF = '25252'
  19. ), 'los datos introducidos no son correctos' ) ,  (
  20. SELECT Pass
  21. FROM nivel2
  22. WHERE Email = '525225'
  23. AND CIF = '252525'
  24. ) ) ,  (
  25. SELECT Pass
  26. FROM nivel1
  27. AND DNI = '28823418z'

Debes pasarle la consulta entera como valor que deseas mostrar. De esta forma si funciona

Te comparto este link.
http://kopernix.com/?q=node/131
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 20/04/2009 a las 10:06
  #26 (permalink)  
Antiguo 20/04/2009, 10:05
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Pues ponga NULL o '' el caso esque me devuelve la tabla password con contenido NULL, vamos que no me devuelve el contenido de Pass aunque los datos sean correctos.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #27 (permalink)  
Antiguo 20/04/2009, 10:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Mira el enlace que te puse en el post anterior. Te lo puse después.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #28 (permalink)  
Antiguo 20/04/2009, 10:28
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

Así que no admite lo de tX.Pass .. vaya, que pena, parecía más eficiente.

He estado leyendo el enlace que me has proporcionado y por lo que he entendido en tu último ejemplo habría que sustituir = NULL por IS NULL y <> NULL por IS NOT NULL, ¿correcto?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #29 (permalink)  
Antiguo 20/04/2009, 10:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Busqueda en 3 tablas no relacionadas

Dude--

Estuve leyendo tu problema mas detenidamente. Lo que requieres, es buscar en las tablas si ese registros existe. Si existe, requeres de ese password, sino comparas nuevamente con otra tabla.

Si es así, creo que sería mejor valernos de count para evitar el uso de null.
Pruebate esto:

Código mysql:
Ver original
  1. FROM nivel1
  2. AND DNI = '28823418z'
  3. ) = 0, if( (
  4. FROM nivel2
  5. WHERE Email = '525225'
  6. AND CIF = '252525'
  7. ) = 0, if( (
  8. FROM nivel3
  9. WHERE Email = '525252'
  10. AND CIF = '25252'
  11. ) <> 0, (
  12. SELECT Pass
  13. FROM nivel3
  14. WHERE Email = '525252'
  15. AND CIF = '25252'
  16. ), 'los datos introducidos no son correctos' ) ,  (
  17. SELECT Pass
  18. FROM nivel2
  19. WHERE Email = '525225'
  20. AND CIF = '252525'
  21. ) ) ,  (
  22. SELECT Pass
  23. FROM nivel1
  24. AND DNI = '28823418z'

Si devuelve un cero, no lo encontró en esa tabla y se dirige a la otra tabla a buscarlo.
En el momento que lo crea, ahi si lo puedes pasar como parametro con (select pass from nivel... etc.)

Este si te debe funcionar.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #30 (permalink)  
Antiguo 20/04/2009, 11:09
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: Busqueda en 3 tablas no relacionadas

He probado y funciona tanto con IS NULL y IS NOT NULL, como con = 0 y <> 0; tal y como indicas en tu último ejemplo.

No entiendo porque dices que es más conveniente usar count(). Corrígeme si me equivoco: En el primer caso estamos haciendo una consulta que devuelve el contenido de un campo, en caso de no encontrar coincidencias este campo es NULL, por lo que según el enlace que aportaste veo correcta la comparación. En el segundo caso la mecánica es similar, solo que al hacer un count() para comprobar la existencia de los datos en una tabla devuelve un valor numérico y no podríamos comparar con NULL por eso usamos "0".

PD: Te daría más karma porque lo mereces, de hecho pareces mi ángel de la guarda :D. Pero no me deja, dice que tengo que darle a otros usuarios antes xD
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
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 03:16.