Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Select de de tres tablas.

Estas en el tema de Select de de tres tablas. en el foro de Mysql en Foros del Web. Buenos dias, quiero hacer un select de tres tablas en las cuales dos de ellas tienen una clave (FK) llamada NUM_USUARIO , que son usuarios ...
  #1 (permalink)  
Antiguo 17/12/2012, 02:52
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Select de de tres tablas.

Buenos dias, quiero hacer un select de tres tablas en las cuales dos de ellas tienen una clave (FK) llamada NUM_USUARIO, que son usuarios y dir_usuarios, pero la tercera tabla llamada avisos_wed no tiene ese clave. Podría sacar los demas datos de la tabla que tambien contienen campos como nombre,apellidos, etc. de avisos_wed?

Pongo el select que actualmente tengo con dos tablas:
Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion,A.telefono
  2. FROM usuarios U,dir_usuarios D
  3. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte'";
Gracias y un saludo

Última edición por gnzsoloyo; 17/12/2012 a las 03:09 Razón: Código de programación no está permitido en los foros de BBDD.
  #2 (permalink)  
Antiguo 17/12/2012, 02:56
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Select de de tres tablas.

Pon los creates de las tres tablas.
  #3 (permalink)  
Antiguo 17/12/2012, 03:05
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por Heimish2000 Ver Mensaje
Pon los creates de las tres tablas.
Buenos dias, te refieres a la estructura de cada tabla?
  #4 (permalink)  
Antiguo 17/12/2012, 03:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Cita:
pero la tercera tabla llamada avisos_wed no tiene ese clave.
Si la tercera tabla no tiene una FK que provenga de alguna de las otras dos tablas, no puedes hacer un JOIN. Ni tendría sentido hacerlo porque eso implicaría que ningún registro de "avisos_wed" está vinculado con ninguno de los de las otras.
Suena a que ese conjunto no está debidamente relacionado.

¿Cómo se relaciona la tercera tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/12/2012, 03:19
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si la tercera tabla no tiene una FK que provenga de alguna de las otras dos tablas, no puedes hacer un JOIN. Ni tendría sentido hacerlo porque eso implicaría que ningún registro de "avisos_wed" está vinculado con ninguno de los de las otras.
Suena a que ese conjunto no está debidamente relacionado.

¿Cómo se relaciona la tercera tabla?
Hola, entre las tres tablas las relaciono con el dato del nº de teléfono.
  #6 (permalink)  
Antiguo 17/12/2012, 03:33
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Pongo las estructuras:

usuarios:

Código MySQL:
Ver original
  1. CREATE TABLE `wedserver2012`.`usuarios` (
  2. `NUM_USUARIO` int( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `NOMBRE` char( 45 ) DEFAULT NULL ,
  4. `APELLIDOS` char( 100 ) DEFAULT NULL ,
  5. `NIF` varchar( 20 ) DEFAULT NULL ,
  6. `TELEFONO` char( 15 ) DEFAULT NULL ,
  7. `TELEFONO2` char( 15 ) DEFAULT NULL ,
  8. `TELEFONO3` char( 15 ) DEFAULT NULL ,
  9. PRIMARY KEY ( `NUM_USUARIO` ) ,
  10. UNIQUE KEY `NUM_USUARIO` ( `NUM_USUARIO` ) ,
  11. KEY `IUSUARIOSAPELLIDOS` ( `APELLIDOS` ) ,
  12. KEY `IUSUARIOSINDICE` ( `NUM_USUARIO` ) ,
  13. KEY `IUSUARIOSNOMBRE` ( `NOMBRE` ) ,
  14. KEY `IUSUARIOSTELEFONO1` ( `TELEFONO` ) ,
  15. KEY `IUSUARIOSTELEFONO3` ( `TELEFONO3` ) ,
  16. KEY `IUSUARIOSTELEFONO2` ( `TELEFONO2` ) ,
  17. KEY `IUSUARIOUSUARIOS` ( `NUM_USUARIO` )


dir_usuarios:

Código MySQL:
Ver original
  1. CREATE TABLE `wedserver2012`.`dir_usuarios` (
  2. `INDICE` int( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `NUM_USUARIO` int( 11 ) DEFAULT NULL ,
  4. `NUM_DIR` smallint( 6 ) DEFAULT NULL ,
  5. `CALLE` char( 30 ) DEFAULT NULL ,
  6. `NUMERO` char( 10 ) DEFAULT NULL ,
  7. `EDIFICIO` char( 20 ) DEFAULT NULL ,
  8. `PUERTA` char( 10 ) DEFAULT NULL ,
  9. `PISO` char( 5 ) DEFAULT NULL ,
  10. `LETRA` char( 5 ) DEFAULT NULL ,
  11. `POBLACION` varchar( 30 ) DEFAULT NULL ,
  12. `PROVINCIA` varchar( 25 ) DEFAULT NULL ,
  13. `COD_POSTAL` varchar( 12 ) DEFAULT NULL ,
  14. `OBS_DIRECCION` char( 80 ) DEFAULT NULL ,
  15. `PAIS` varchar( 20 ) DEFAULT NULL ,
  16. `CODIGO_SAT` char( 15 ) DEFAULT NULL ,
  17. `EMAIL` char( 100 ) DEFAULT NULL ,
  18. PRIMARY KEY ( `INDICE` ) ,
  19. UNIQUE KEY `INDICE` ( `INDICE` ) ,
  20. KEY `IDIRUSUARIOSCALLE` ( `CALLE` ) ,
  21. KEY `IDIRNUMUSUARIOSPOBLACION` ( `POBLACION` ) ,
  22. KEY `IDIRUSUARIOSUINDICE` ( `INDICE` )
avisos_wed:
Código MySQL:
Ver original
  1. CREATE  TABLE  `wedserver2012`.`avisos_wed` (  `id_aviso` int( 11  )  NOT  NULL  AUTO_INCREMENT ,
  2.  `id_factura` varchar( 100  )  NOT  NULL ,
  3.  `realizacion` date NOT  NULL ,
  4.  `recepcion` date NOT  NULL DEFAULT  '0000-00-00',
  5.  `emision` date NOT  NULL ,
  6.  `NOMBRE` varchar( 50  )  NOT  NULL ,
  7.  `APELLIDOS` varchar( 100  )  NOT  NULL ,
  8.  `NIF` varchar( 10  )  NOT  NULL ,
  9.  `TELEFONO2` varchar( 50  )  NOT  NULL ,
  10.  `calle` varchar( 200  )  NOT  NULL ,
  11.  `numero` varchar( 10  )  NOT  NULL ,
  12.  `edificio` varchar( 10  )  NOT  NULL ,
  13.  `letra` varchar( 10  )  NOT  NULL ,
  14.  `piso` varchar( 10  )  NOT  NULL ,
  15.  `puerta` varchar( 10  )  NOT  NULL ,
  16.  `POBLACION` varchar( 100  )  DEFAULT NULL ,
  17.  `provincia` varchar( 100  )  NOT  NULL ,
  18.  `email` varchar( 100  )  NOT  NULL ,
  19.  `aparatos` varchar( 50  )  NOT  NULL ,
  20.  `marcas` varchar( 50  )  NOT  NULL ,
  21.  `modelo` varchar( 50  )  NOT  NULL ,
  22.  `codigo` varchar( 100  )  NOT  NULL ,
  23.  `serie` varchar( 100  )  NOT  NULL ,
  24.  `compra` date NOT  NULL ,
  25.  `tecnico` varchar( 10  )  NOT  NULL ,
  26.  `tipo` varchar( 100  )  NOT  NULL ,
  27.  `facturacion` varchar( 100  )  NOT  NULL ,
  28.  `situacion` varchar( 40  )  NOT  NULL ,
  29.  `sintoma` varchar( 200  )  NOT  NULL ,
  30.  `observaciones` varchar( 400  )  NOT  NULL ,
  31.  `privadas` varchar( 400  )  NOT  NULL ,
  32.  `TELEFONO` int( 100  )  DEFAULT NULL ,
  33.  `distribuidor` varchar( 100  )  NOT  NULL ,
  34.  `TELEFONO3` varchar( 15  )  DEFAULT NULL ,
  35.  PRIMARY  KEY (  `id_aviso`  )  ) ENGINE  = InnoDB  DEFAULT CHARSET  = latin1;
Perdon, me he equivocado la tabla dir_usuarios no tiene el campo TELEFONO.
Podria relacionar la tabla usuarios y avisos_wed ya que tienen el campo TELEFONO verdad?

Última edición por gnzsoloyo; 17/12/2012 a las 04:27 Razón: Código SQL MAL ETIQUETADO. Usar Highlight SQL o MySQL.
  #7 (permalink)  
Antiguo 17/12/2012, 04:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Empecemos por el principio: Parece evidente que no terminas de entender qué es una FK.
Dos tablas se relacionan no por un campo cualquiera (y usar un teléfono es una pésima elección), sino por su FK, y una FK es un campo o conjunto de campos cuyo valor referencia a la PK de otra tabla.
Para ser preciso, tu no tienes definida ninguna FK en tus tablas, porque "num_usuario" no está declarada como tal en la tabla dir_usuarios. Incluso más: Ni siquiera está definida como Key en esa misma tabla, con lo que toda consistencia de datos la debes estar manteniendo programáticamente, con todos los errores que eso puede causar luego.

Creo que deberíamos dar un paso atrás y empezar a ver de nuevo algunos principios que parecen no estar correctamente implementados en esa base.
Ten en cuenta que si la base no está bien diseñada, o al menos correctamente implementada, todo ello te traerá problemas al realizar consultas, que no te dará las respuestas correctas precisamente por una consistencia que tu base no es capaz de asegurar.

PD: Por favor, usa la etiqueta de Highlight correcta para el SQL. Ya te aclaré que PHP no es SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/12/2012, 06:03
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Para ser preciso, tu no tienes definida ninguna FK en tus tablas, porque "num_usuario" no está declarada como tal en la tabla dir_usuarios. Incluso más: Ni siquiera está definida como Key en esa misma tabla, con lo que toda consistencia de datos la debes estar manteniendo programáticamente, con todos los errores que eso puede causar luego.
PD: Por favor, usa la etiqueta de Highlight correcta para el SQL. Ya te aclaré que PHP no es SQL.

gnzsoloyo, num_usuario no la tengo como primaria porque tengo registros duplicados. Es decir el mismo nº de usuario puede tener varias direcciones.
PD: ya vi la pestaña MySQL. Gracias

Última edición por satjaen; 17/12/2012 a las 06:14
  #9 (permalink)  
Antiguo 17/12/2012, 06:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Cita:
num_usuario no la tengo como primaria porque tengo registros duplicados. Es decir el mismo nº de usuario puede tener varias direcciones.
Bueno, al decirme eso me estás confirmando que tu base está mal planteada, pero además que no tienes claro lo que es una FK.
Yo no estoy diciendo que num_usuario pueda ser PK de dir_usuario, sino que num_usuario debe ser FK (foreign key) de dir_usuario, que es algo completamente diferente.
Al definir a num_usuario como FK en dir_usuario lo que sucede es que se mantiene una integridad completa de datos entre un usuario determinado y cada una de sus direcciones, que pueden ser N direcciones, pero en el contexto de tu caso puedes perfectamente poner una dirección con un num_usuario inexistente, porque la base no puede asegurar por si misma la integridad y consistencia de ese dato.
Ahora bien, en el caso de al tercera tabla, si avisos_wed se debe corresponder con un usuario y además con una dirección dada, entonces requiere que ambas PK de cada tabla estén en ella como FK, lo que determinaría completamente la relación y el JOIN sería posible de realizar.
Si la dirección no es determinante, entonces sólo debería ir el num_usuario, pero aún así debería ser FK.

¿Vas entendiendo la lógica del asunto?

Si no defines jamás podrías asegurar la consistencia de los datos, y por ende terminarías teniendo datos-basura.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 17/12/2012, 06:28
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, al decirme eso me estás confirmando que tu base está mal planteada, pero además que no tienes claro lo que es una FK.
Yo no estoy diciendo que num_usuario pueda ser PK de dir_usuario, sino que num_usuario debe ser FK (foreign key) de dir_usuario, que es algo completamente diferente.
Al definir a num_usuario como FK en dir_usuario lo que sucede es que se mantiene una integridad completa de datos entre un usuario determinado y cada una de sus direcciones, que pueden ser N direcciones, pero en el contexto de tu caso puedes perfectamente poner una dirección con un num_usuario inexistente, porque la base no puede asegurar por si misma la integridad y consistencia de ese dato.
Ahora bien, en el caso de al tercera tabla, si avisos_wed se debe corresponder con un usuario y además con una dirección dada, entonces requiere que ambas PK de cada tabla estén en ella como FK, lo que determinaría completamente la relación y el JOIN sería posible de realizar.
Si la dirección no es determinante, entonces sólo debería ir el num_usuario, pero aún así debería ser FK.

¿Vas entendiendo la lógica del asunto?

Si no defines jamás podrías asegurar la consistencia de los datos, y por ende terminarías teniendo datos-basura.
OK, entonces me he confundido. Pero donde esta en Myadmin FK?, yo pensaba que era un simbolo de una llave dorada.
Porque en la tabla usuarios esta bien?

Código MySQL:
Ver original
  1. PRIMARY KEY ( `NUM_USUARIO` ) ,
  #11 (permalink)  
Antiguo 17/12/2012, 07:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Básicamente está bien, aunque hay tres consideraciones:
- Por un lado, si el NIF es obligatorio (no sé lo que es, pero supongo que se parece a nuestro CUIT), eso podría ser suficiente para establecer una PK, con lo que hacerla numérica y autoincremental puede terminar siendo redundante. En todo caso es una decisión de diseño. Depende de lo que quieras hacer.
- Si un usuario puede tener 0 a N teléfonos, los teléfonos no van en la tabla. Poner una cantidad fija puede ser demasiado o muy poco, dependiendo del caso, y desperdiciar espacio jamás es buena idea, aunque te sobre. Además, si pones un campo por teléfono también estás complicando las consultas, porque el teléfono lo deberás buscar en cada uno de los campos, mientras que ponerlos en otra tabla relacionada por el num_usuario te permitirá consultar siempre el mismo, y la consulta será más simple.
- Son demasiados índices. Los índices siempre tienen impacto en la performance con los INSERT/UPDATE, por lo que si se esperan muchas entradas, tantos indices conspiran en contra. Es preferible la cantidad de indices justa y con buena selectividad.

Respecto a lo de la tabla dir_usuarios, en realidad tiene ciertos defectos.
Una tabla que contiene direcciones no conviene que tenga campos VARCHAR para poner manualmente los nombres de ciudades, provincias, países, y cosas así. Eso es preferible manejarlos en tablas independientes, y que sean relacionados a la tabla de direcciones por su PK. Es decir: Lo que van son campos numéricos, que sean las FK de las Localidades, Paises, Provincias o Departamentos (o como se llamen las subdivisiones provinciales).
Así es como se hace usualmente.

Hay al menos un par de razones para hacerlo así:

1) No necesitas desperdiciar espacio para almacenar N veces la misma localidad, departamento, provincia y país.

2) Evitas que el usuario meta la pata y de pongan Cba., Cord., Cordova, Córdova o Córdoba como ciudad, lo que terminaría interpretándose como cinco ciudades distintas, cuando en realidad es una sola.

Nunca te olvides que al usuario hay que dejarle el menor dominio posible sobre cosas que son estandarizadas, ya que la mayor fuente de errores es... la interfase silla-teclado, como decía un amigo mío (el usuario).

En definitiva, es mejor que separes esos datos en otras tablas (relacionadas entre sí a su vez para que cada ciudad corresponda con su provincia y cada provincia con su país), y no dejarlos así.

Finalmente, la tercera tabla tiene un defecto primario: Si el gestionante es un usuario, y el usuario tiene siempre al menos una dirección, a menos que la transacción deba ser entregada en otra parte no declarada, no tiene sentido ni utilidad que los datos de dirección estén allí. Son redundantes, bastaría con el id del usuario y de la direccion que usará.
Y aún así, si la dirección de entrega es diferente a las declaradas, eso sería un caso opcional y no obligatorio, por tanto esos datos deberían estar en una tabla específica relacionada con la tercera tabla, donde sólo se consultarían si un campo dir_usuario_id (la dirección destino a usar) fuese NULL.
Es decir: Lo que tendría más sentido es que el usuario que hace la gestión declare en cuál dirección registrada será entregado lo que sea, y en caso de definir otra dirección no declarada, que ese conjunto de datos sea o una dirección declarada nueva, o una dirección de destino de la transacción. En el segundo caso esos datos deberían ir en una tabla separada y relacionados con el ID de la tercera tabla.

Es posible que esto te resulte algo pesado, y un poco engorroso por la falta de experiencia en el diseño de bases de datos, pero te puedo asegurar con conocimiento de causa, que normalizar las tablas mas o menos como te describo hará que a la larga no tengas tantos problemas al construir las consultas, y posiblemente no te veas obligado a modificar la base, cuando esta ya esté productiva.
Modificar bases en trabajo es la pesadilla de los DBA.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 17/12/2012, 09:41
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Ok, gnzsoloyo muchas gracias por explicarme tantas cosas. Pero crees que podremos sacar datos de la tabla avisos_wed con la consulta:

Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U,dir_usuarios D
  3. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte';

O tendremos que hacer un segunda consulta despues de esta para la tabla avisos_wed?

Gracias de verdad por tú tiempo.

Última edición por gnzsoloyo; 17/12/2012 a las 09:54 Razón: Eliminar todo código no SQL.
  #13 (permalink)  
Antiguo 17/12/2012, 10:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Intentalo, si quieres. En el estado actual de esa estructura de tablas no te puedo garantizar que la consulta funcione bien, porque es imposible saber si hay inconsistencias previas.
Personalmente, ni me molestaría en seguir avanzando con las consultas, sin haber normalizado esas tablas. Para mí, es una pérdida de tiempo y esfuerzo.
Pero eres tu quien tiene que tomar esa decisión, no yo.

Lo que si te sugiero es que uses correctamente los JOIN, y evites usar las relaciones en el WHERE, porque el parser de MySQL no lo puede optimizar.
Lo que me preguntas es algo como:
Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U
  3.     INNER JOIN dir_usuarios DON U.NUM_USUARIO = D.NUM_USUARIO
  4.     INNER JOIN avisos_wed A DON U.telefono = A.telefono
  5. WHERE U.telefono='$vte';

PD: No sólo tienes que etiquetar correctamente el Highlight. Tienes que quitar TODO lo que sea PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/12/2012 a las 10:08
  #14 (permalink)  
Antiguo 17/12/2012, 13:15
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Intentalo, si quieres. En el estado actual de esa estructura de tablas no te puedo garantizar que la consulta funcione bien, porque es imposible saber si hay inconsistencias previas.
Personalmente, ni me molestaría en seguir avanzando con las consultas, sin haber normalizado esas tablas. Para mí, es una pérdida de tiempo y esfuerzo.
Pero eres tu quien tiene que tomar esa decisión, no yo.

Lo que si te sugiero es que uses correctamente los JOIN, y evites usar las relaciones en el WHERE, porque el parser de MySQL no lo puede optimizar.
Lo que me preguntas es algo como:
Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U
  3.     INNER JOIN dir_usuarios DON U.NUM_USUARIO = D.NUM_USUARIO
  4.     INNER JOIN avisos_wed A DON U.telefono = A.telefono
  5. WHERE U.telefono='$vte';

PD: No sólo tienes que etiquetar correctamente el Highlight. Tienes que quitar TODO lo que sea PHP.
gnzsoloyo lo he puesto así, porque creo que te ha faltado la D en dir_usuarios no?, pero de todas formas con la D puesta tampoco me encuentra resultados.
Una pregunta, que es el DON?

Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion,A.telefono
  2. FROM usuarios U
  3.     INNER JOIN dir_usuarios D DON U.NUM_USUARIO = D.NUM_USUARIO
  4.     INNER JOIN avisos_wed A DON U.telefono = A.telefono
  5. WHERE U.telefono='$vte'

Última edición por gnzsoloyo; 17/12/2012 a las 13:26 Razón: Quitar los segmentos de codigo PHP, por favor...
  #15 (permalink)  
Antiguo 17/12/2012, 13:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Cita:
Una pregunta, que es el DON
Un error de tipeo....
Creo que es bastante evidente, ¿no?
Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion,A.telefono
  2. FROM usuarios U
  3. INNER JOIN dir_usuarios D ON U.NUM_USUARIO = D.NUM_USUARIO
  4. INNER JOIN avisos_wed A ON U.telefono = A.telefono
  5. WHERE U.telefono='$vte'
PD: Si no te devuelve nada, eso sólo significa una cosa: Tienes inconsistencia de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 17/12/2012, 14:44
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Un error de tipeo....
Creo que es bastante evidente, ¿no?
Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion,A.telefono
  2. FROM usuarios U
  3. INNER JOIN dir_usuarios D ON U.NUM_USUARIO = D.NUM_USUARIO
  4. INNER JOIN avisos_wed A ON U.telefono = A.telefono
  5. WHERE U.telefono='$vte'
PD: Si no te devuelve nada, eso sólo significa una cosa: Tienes inconsistencia de datos.
gnzsoloyo, no me tira resultados. He pensado en hacer dos select, para si en el primer select no esta el telefono que busque en el segundo:

1º Consulta:

Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U,dir_usuarios D
  3. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte';

2º Consulta:

Código MySQL:
Ver original
  1. SELECT A.telefono FROM  avisos_wed A WHERE A.telefono='$vte';


Pero no sé como plantearlo.


EDITO: gnzsoloyo, voy a intentarlo en el foro de php y si no puedo ya te digo algo. Gracias

Última edición por satjaen; 17/12/2012 a las 17:33
  #17 (permalink)  
Antiguo 20/12/2012, 07:11
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Select de de tres tablas.

gnzsoloyo, ya he podido resolverlo en php. Gracias y felices fiestas
  #18 (permalink)  
Antiguo 20/12/2012, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Select de de tres tablas.

Genial. Me alegro que hayas podido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: select, sql, tabla, tres
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 13:48.