(PHP - Help) Consulta de valores en varias tablas e impresion

Publicado por Don_Gusanito, Abril 17, 2006, 15:25:12

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Don_Gusanito

Tengo el siguiente inconveniente, estoy haciendo una consulta mysql en la que traigo valores de 3 tablas, la consulta funciona y con eso no hay inconvenientes.
El tema esta en que al momento de imprimir los valores traidos en la consulta no lo puedo hacer. Este es el codigo que escribi:


<?
include("conex2.php");
$link=Conectarse();

$query = "SELECT noticias.id, noticias.titulo, noticias.categ, categorias.nombre, noticias.topico,
topicos.nombre FROM noticias , categorias , topicos where noticias.categ=categorias.id and
noticias.topico=topicos.id order by noticias.id desc";

$result = mysql_query($query);

echo "<table  border='0'> <tr><td>Titulo</td><td>Categoria</td><td>Topico</td></tr>";
while ($list = mysql_fetch_array($result))
{
echo "<tr>";
echo  "<td>".$list['noticias.titulo']."</td><td>"
    .$list['categorias.nombre']."</td><td>"
    .$list['topicos.nombre']."</td><td>";

echo "</tr>";

}
echo "</table>";
?>


Muchas gracias a todo aquel que me pueda dar una mano.

Predicador

#1
Hola,
El problema esta en como trabaja el mysql_fetch_array() que al haber columnas con el mismo nombre (ya que no toma el nombre te la tabla para generar los nombres de los subindices) el que primero aparece tiene precedencia, por ende lo que debes hacer es definir un alias en la consulta sql (usando el AS) para asignarle un nombre diferente, aca te dejo tu codigo modificado.
include("conex2.php");
$link=Conectarse();

$query = "SELECT noticias.id, noticias.titulo, noticias.categ, categorias.nombre as categ, noticias.topico as topic,
topicos.nombre FROM noticias , categorias , topicos where noticias.categ=categorias.id and
noticias.topico=topicos.id order by noticias.id desc";

$result = mysql_query($query);

echo "<table  border='0'> <tr><td>Titulo</td><td>Categoria</td><td>Topico</td></tr>";
while ($list = mysql_fetch_array($result))
{
echo "<tr>";
echo  "<td>".$list['titulo']."</td><td>"
    .$list['categ']."</td><td>"
    .$list['topic']."</td><td>";
}


Fijate que a titulo no le genere un alias, pero este deberia salir bien ya que ademas de ser el primero en la lista de columnas con ese nombre no hay otro repetido, asi que no se generan ambiguedades.
Si no queres usar aliases en la consulta sql, lo que debs hacer es acceder a los campos por indice y no por nombre (ya que el mysql_fetch_array() genera tanto arreglos asociativos como numericos) y lo accederias asi:
echo  "<td>".$list[1]."</td><td>"
    .$list[3]."</td><td>"
    .$list[4]."</td><td>";


Baii y exitos con tu proyecto.
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

Don_Gusanito

Como siempre Predicador, no tengo mas que palabras de agradecimiento para vos.

Ahora aprobecho para hacerte otra consulta que masomenos tiene que ver con el tema xq estuve probando y quiero saber si se puede.

En MySql no funciona una consulta como la siguiente, no?

Select e.nombre, d.departamento from empleados e, departamentos d
where e.dept_id=d.id

Predicador

Para ser estricto, deberias usar el AS para definir los aliases de las tablas (empleados e, departamentos d), pero a veces los ODBC drivers se encargan de hacer un pre-parsing y solucionan esos casos, podrias probarlo, si ves que en tu caso no funciona, hacelo como SQL especifica, esto es:
SELECT e.nombre, d.departamento FROM empleados AS e, departamentos AS d
WHERE e.dept_id = d.id

De otro modo deberia andar bien :D
Baii.
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

Camello_AR

Si bien no me solucina nda, muy buena sobre la Explicación sobre aliases (especialmente para achicar el nombre de tablas para no poner tabla1. t1.. sino 1.a FROM tabla1 as 1)

Predicador Master of SQL (Structured Query Lenguaje)

Predicador

lol, no soy master en nada, solo soy tan buen mentiroso que mis mentiras se hacen realidad :P
Baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

Camello_AR

No te achiques, siempre das en la tecla con SQL y PHP se ve que estas con eso