Foros del Web » Programando para Internet » PHP »

Resultado de consulta a multiples tablas

Estas en el tema de Resultado de consulta a multiples tablas en el foro de PHP en Foros del Web. Hola a todos. Tengo un problema que creo tiene que ver con el array. Hago una consulta a varias tablas con mysql y todo bien, ...
  #1 (permalink)  
Antiguo 13/11/2009, 04:38
 
Fecha de Ingreso: octubre-2009
Ubicación: Córdoba
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Resultado de consulta a multiples tablas

Hola a todos.
Tengo un problema que creo tiene que ver con el array.
Hago una consulta a varias tablas con mysql y todo bien, a la hora de mostrar los resultados es donde va mi consulta ya que tengo una tabla (temas) con los campos idpublicacion y materia (tengo las tablas materias y publicaciones).
De forma que una publicación puede corresponder a varias materias.
Al mostrar los resultados de la consulta me salen los datos de la publicacion en una fila que corresponde con una materia, para varias materias me salen los datos en varias filas, donde lo unico que cambia es la materia.
quisiera que me saliera en la fila los datos de la publicación y todas las materias a la que pertenece.
este es el codigo:

$result = mysql_query($query);
if (!$result)
echo "<h2>No se ha podido realizar la consulta</h2>";

else
{

$num_resultados=mysql_num_rows($result);
echo "<p align=center><strong>Número de publicaciones encontradas: ".$num_resultados."</strong></p>";

for ($i=0; $i<$num_resultados; $i++)

{
$row=mysql_fetch_array($result);
echo "<table width = \"800\">";
echo "<tr>";
echo "<td width = \"500\">";
echo "<a href = \"$row[enlacepdf]\" class='clase2' target='_blank'>";
echo "<u>";
echo $j = $i+1;
echo ". ";
echo stripslashes($row["titulo"]);
echo "</u>";
echo "</a>";
echo "</td>";
echo "<td>";
echo "ID Publicación: ";
echo stripslashes($row["idpublicacion"]);
echo "</td>";
echo "<td>";
echo "Referencia:";
echo "</td>";
echo "<td>";
echo stripslashes($row["referencia"]);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td width = \"500\">";
$mayusculas =strtoupper ($row["texto"]);
echo stripslashes($mayusculas);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo stripslashes($row["observaciones"]);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "Materia: "; //aqui esta la duda
echo stripslashes($row["materia"]);
echo "</td>";
echo "</tr>";

echo "</table>";


No pongo la consulta a mysql porque me funciona bien.
Gracias
  #2 (permalink)  
Antiguo 13/11/2009, 04:53
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 53
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Resultado de consulta a multiples tablas

Cita:
Edito esta parte porque me he liado leyendo y la solución que daba no servía :P
De momento creo que una subconsulta te mostraría las materias, es decir:

Cita:
echo "Materia: ";
$querym = "select materia from nose where id=" . $result["id"];
$resultm = mysql_query($query);
while($rowm=mysql_fetch_array($resultm)) echo $rowm["materia"] . "<br>";


Y para mejorar el código, te recomiendo que quites el for y pongas

Cita:
while($row=mysql_fetch_array($result)) {


}

Última edición por moddik; 13/11/2009 a las 05:04
  #3 (permalink)  
Antiguo 13/11/2009, 12:02
 
Fecha de Ingreso: octubre-2009
Ubicación: Córdoba
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Resultado de consulta a multiples tablas

No me funciona, sigue poniendo una materia por fila, te pongo el codigo con la consulta mysql,


$conn = db_connect();


$query = "SELECT disposiciones.titulo, disposiciones.idpublicacion, disposiciones.texto, materias.materia, ";
$query .= FROM `disposiciones`, `materias`, `temas` ";
$query .= "WHERE disposiciones.idpublicacion=temas.idpublicacion and temas.idmateria=materias.idmateria";

//como ves aqui realizo la consulta, la tabla disposiciones, la tabla tema (idpublicacion, idmateria) y la tabla materias (idmateria, materia)
Con la tabla temas relaciono todas las materias que comprende una publicación.

$result = @mysql_query($query);
if (!$result)
echo "<h2>No se ha podido realizar la consulta</h2>";

else
{

$num_resultados=mysql_num_rows($result);
echo "<p align=center><strong>Número de disposiciones encontradas: ".$num_resultados."</strong></p>";

for ($i=0; $i<$num_resultados; $i++)

{
$row=mysql_fetch_array($result);
echo "<table width = \"800\">";
echo "<tr>";
echo "<td width = \"500\">";
echo "ID Disposición: ";
echo stripslashes($row["idpublicacion"]);
echo "</td>";
echo "<td width = \"500\">";
$mayusculas =strtoupper ($row["texto"]);
echo stripslashes($mayusculas);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";

echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo stripslashes($row["departamento"]);
echo "</td>";
echo "<td>";
echo stripslashes($row["boletin"]." ".$row["fecha"]." núm. (".$row["noboletin"].")");
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "Materia: ";
echo stripslashes($row["materia"]);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;&nbsp;&nbsp;";
echo "<a href = \"edit_publicacion_form.php?idpublicacion=$row[idpublicacion]\"class='clase2'>Modificar</a>";
echo "</td>";
echo "<td>";
echo "<a href = \"duplicar_publicacion_form.php?idpublicacion=$ row[idpublicacion]\"class='clase2'>Duplicar</a>";
echo "</td>";
echo "<td>";
echo "<a href = \"borrarpublicacion.php?idpublicacion=$row[idpublicacion]\" class='clase2'>Borrar</a>";
echo "</td>";
echo "</tr>";
echo "</table>";
  #4 (permalink)  
Antiguo 13/11/2009, 12:07
 
Fecha de Ingreso: octubre-2009
Ubicación: Córdoba
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Resultado de consulta a multiples tablas

No me funciona, sigue poniendo una materia por fila, te pongo el codigo con la consulta mysql,


$conn = db_connect();


$query = "SELECT disposiciones.titulo, disposiciones.idpublicacion, disposiciones.texto, materias.materia, ";
$query .= FROM `disposiciones`, `materias`, `temas` ";
$query .= "WHERE disposiciones.idpublicacion=temas.idpublicacion and temas.idmateria=materias.idmateria";

//como ves aqui realizo la consulta, la tabla disposiciones, la tabla temas (idpublicacion, idmateria) y la tabla materias (idmateria, materia)
Con la tabla temas relaciono todas las materias que comprende una publicación.

$result = @mysql_query($query);
if (!$result)
echo "<h2>No se ha podido realizar la consulta</h2>";

else
{

$num_resultados=mysql_num_rows($result);
echo "<p align=center><strong>Número de disposiciones encontradas: ".$num_resultados."</strong></p>";

for ($i=0; $i<$num_resultados; $i++)

{
$row=mysql_fetch_array($result);
echo "<table width = \"800\">";
echo "<tr>";
echo "<td width = \"500\">";
echo "ID Disposición: ";
echo stripslashes($row["idpublicacion"]);
echo "</td>";
echo "<td width = \"500\">";
$mayusculas =strtoupper ($row["texto"]);
echo stripslashes($mayusculas);
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "Materia: ";
echo stripslashes($row["materia"]);
echo "</td>";
echo "</tr>";
echo "</table>";

He intentado resumir ya que solo me interesa lo que tiene que ver con materia y tema.
No sé si lo que me quieres decir es que elimine del primer select lo correspondiente a materia??
  #5 (permalink)  
Antiguo 13/11/2009, 12:50
 
Fecha de Ingreso: octubre-2009
Ubicación: Córdoba
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Resultado de consulta a multiples tablas

Muchas gracias moddik.
He separado la consulta y me funciona bien.
Perdonen los dos mensajes anteriores, pero no se como borrarlos, el primero lo envie sin haber terminado la consulta.
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 17:28.