Consulta a dos tablas conjuntamente

Cómo puedo hacer para acceder a dos tablas distintas en una misma base de datos con una sola consulta. Te pongo un ejemplo:
$busqueda = mysql_query(" (select * FROM cuestiones_teoria WHERE IdTema='$array_temas[$t]' ORDER BY RAND()) UNION (select * FROM situaciones_practicas WHERE IdTema='$array_temas[$t]' ORDER BY RAND()) LIMIT 5 ") ;
Quiero que todo me quede en una única consulta para luego poder recorrer el resultado con un array ==> while( $busqueda_array = mysql_fetch_array($busqueda) ){.
Haciendo lo de arriba me da error. He probado ha hacer las consultas de cada tabla por separado y luego unir los dos arrays( utilizando array_merge() ) que resultan de cada consulta para finalmente tener un solo array que lo contenga todo, pero el resultado no es el que yo esperaba porque los nombres de casi todos los campos de las dos tablas son iguales y entonces la función array_merge() me los une y me da algo muy extraño.
Espero haberme explicado bien, si no es así, por favor dímelo e intentaré explicarme mejor. Haber si consigues lo que quiero.

5 Respuestas

Respuesta
No estoy seguro de los paréntesis más externos y del uso de variables de array dentro de la string.
¿Order by rand()?... mmm
Yo probaria asi:
$busqueda = mysql_query("
select * FROM cuestiones_teoria WHERE IdTema='".$array_temas[$t]."' UNION select * FROM situaciones_practicas WHERE IdTema='".$array_temas[$t]."' LIMIT 5 ") ;
Respuesta
1
Para la unión de tablas, dos cosas importantes.
1. Revisa la versión de mysql que tienes instalada. Union estra disponible desde la versión 4.0
2. Los campos de las dos select han de ser idénticos en tipo y nombre, utiliza "as" para remonbrar los campos en las tablas y recuerda que han de coincidir en tipo y orden, no uses del *.
Respuesta
1
Pues mira, en realidad es muy sencillo... solamente tienes que anteponer el nombre de la tabla al nombre del campo y separarlos por un punto, por ejemplo:
Mitable. Micampo
Y con eso puedes referirte a cualquier campo de cualquier tabla de la base de datos.
Respuesta
1
INTENTA CON ESTO, A VER SI TE Entendí lo que quieres hacer
SELECT * FROM cuestiones_teoria INNER JOIN situaciones_practicas ON cuestiones_teoria.IdTema=situaciones_practicas.IdTema WHERE situaciones_practicas.IdTema=$array_temas[$t] ORDER BY RAND() LIMIT 5
Respuesta
De momento con la version que estoy trabajando ahora de mysql esto no es posible.. hay que esperar a que se termine y se publique la ultima version.. EN la cual se espera que se puedan hacer ese tipo de consultas...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas