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

Una sola consulta para dos tablas

Estas en el tema de Una sola consulta para dos tablas en el foro de Mysql en Foros del Web. Hola... Quiero hacer una sola consulta pero a dos tablas. Resulta que las dos tablas tienen la misma cantidad de campos y con igual nombre ...
  #1 (permalink)  
Antiguo 02/10/2010, 13:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Una sola consulta para dos tablas

Hola...

Quiero hacer una sola consulta pero a dos tablas. Resulta que las dos tablas tienen la misma cantidad de campos y con igual nombre y no lo puedo lograr.

He buscado información en el manual y demás pero no hay caso!

Intenté hacer esto:

$resultado = mysql_query("SELECT * FROM tabla1, tabla2 ORDER BY tabla1.id ASC") or die (mysql_error());

pero me da una exagerada cantidad de registros y repetidos!

Por favor, alguien me puede orientar?
  #2 (permalink)  
Antiguo 02/10/2010, 15:41
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, 5 meses
Puntos: 2658
Respuesta: Una sola consulta para dos tablas

Es el problema de usar la coma en lugar del JOIN y además hacer tablas de estructura similar para usos diferentes.
Lo que tienes que hacer es usar INNER JOIN y relacionarlas por el campo que realemtne als relaciona.
Supongamos:
Código MySQL:
Ver original
  1. * FROM tabla1 t1 INNER JOIN tabla2 t2 ON t1.id = t2.camporelacional
  2. ORDER BY tabla1.id ;
El orden es ascendente siempre. Para que sea diferente debes indicarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/10/2010, 17:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Una sola consulta para dos tablas

Hola gnzsoloyo, gracias por ayudarme...

Supongo que donde dices "campo relacional" sera el nombre de uno de los campos, no?

Por ejemplo, uno de los campos en ambas tablas se llama "documento" y yo trato de imprimirlo así:

Código PHP:
$resultado mysql_query("SELECT * FROM tabla1 t1 
INNER JOIN tabla2 t2 ON t1.id=t2.documento"
) or die (mysql_error());

while(
$datos mysql_fetch_array($resultado)){
 
    echo 
$datos['documento'];

Entendiendo esto y probando tu ejemplo, no me envía ningún resultado. Eso sin el order by, por que si le agrego "ORDER BY tabla1.id" me tira error:

Unknown column 'tabla1.id' in 'order clause'
  #4 (permalink)  
Antiguo 02/10/2010, 21:08
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, 5 meses
Puntos: 2658
Respuesta: Una sola consulta para dos tablas

1) Por campo relacional no me refiero al nombre de un campo, sino a un campo cuyo valor relacione ambas tablas. Es decir, si estás tratando de hacer un join entre dos tablas que contienen diferente información, debe haber algo que haga que un registro de la primera se relacione con uno o más de la segunda.
2) Si lo que quieres es que la consulta te muestre los registros de la primera tabla y los de la segunda en forma consecutiva, eso es una operación completamente diferente: Eso es un UNION y se escribe de otra forma- Pero el UNION sólo tiene sentido si ambas tablas son iguales en cuanto a dominios, esto es, si se refieren a lo mismo.. y en ese caso ¿Por qué tendrías DOS tablas distintas?
3) En el ORDER BY debe ir el nombre de un campo que exista en al menos una de las tablas. Puse "tabla1.id" porque ese es el ejemplo que estaba usando. Obviamente tu tienes que poner los nombres correctos... o sea, los de las tablas y los campos que estás usando...

Aclara un poco mejor qué es lo que quieres hacer: relacionar dos tablas o mostrar consecutivamente los registros de las dos...
__________________
¿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 02/10/2010, 23:45
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Una sola consulta para dos tablas

Si gnzsoloyo, perfecta tu explicación y me aclaró que estoy confundiendo la forma en como quiero lograr mi consulta.

En realidad es eso, quiero una consulta que muestre consecutivamente los registros de dos tablas.

Por que dos tablas? por una cuestión organisativa tengo la tabla "actas_nacimiento" y la tabla "obituarios", ambas contienen la misma información por eso los campos de igual nombre.

Ahora, para aprender más, veré de leer sobre "UNION" como me dices.
  #6 (permalink)  
Antiguo 03/10/2010, 06: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, 5 meses
Puntos: 2658
Respuesta: Una sola consulta para dos tablas

Ahora se comprende. Por más que contengan la misma información ambas tablas representan entidades distintas: Vivos y muertos, por decirlo coloquialmente... :)

Las reglas básicas de UNION son simples:
- Las consultas deben contener la misma cantidad de campos. Ni más, ni menos.
- Los campos deben aparecer en el mismo orden y ser del mismo dominio (representar lo mismo conceptualmente), por lo que deben tener el mismo tipo de columna y rango representable.

En tu caso sería un simple:
Código MySQL:
Ver original
  1. FROM tabla1
  2. FROM tabla2;
Esto encadena los resultados de la primera con los de la segunda, eliminando duplicaciones (datos de registros con el mismo cotenido considerado campo a campo).
Si quieres que salgan todos, incluyendo los datos solapados entre tablas, debes usar UNION ALL:
Código MySQL:
Ver original
  1. FROM tabla1
  2. FROM tabla2;
Atención: Un ORDER BY puesto entremedio no produce efecto, porque en el UNION el ORDER usado es el que posee la última tabla invocada.
Esto es posible alterarlo manipulando subconsultas, pero en principio, si quieres ordenar, por el ORDER BY al final.
__________________
¿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; 03/10/2010 a las 14:45
  #7 (permalink)  
Antiguo 03/10/2010, 11:36
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Una sola consulta para dos tablas

Gracias gnzsoloyo, a veces simples explicaciones te aclaran el panorama, sobre todo para los que menos práctica y conocimientos tenemos!

Con lo tuyo y lo que leí del manual, mi consulta quedó así y funciona perfectamente:

Código PHP:
$resultado mysql_query("(SELECT *, DATE_FORMAT(fecha,'%Y') AS fecha
FROM actas_nacimiento) 
UNION 
(SELECT *, DATE_FORMAT(fecha,'%Y') AS fecha 
FROM obituarios) 
ORDER BY apellido_paterno, nombre"

or die (
mysql_error()); 
Nuevamente muchas gracias por tu tiempo y paciencia!

Etiquetas: dos, tablas
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 18:46.