[Php-avanzado] Feliz consulta mysql!

Matias Gea matigea en gmail.com
Lun Ene 3 20:19:34 ARST 2011


Hola, Carolina.

Felicidades a vos tambien!

Y felicitaciones por la consulta.

Te explico cual era tu problema.
La cláusula ON se utiliza para decirle al motor por dónde querés que
una las tablas. Más especificamente, indica las condiciones con las
cuales se unen dos tablas, pero según como esté formada, puede ser o
no ser condicional de la consulta.

En tu caso, la tabla la tenías unida con LEFT JOIN, entonces, aunque
no encuentraba concordancia en la segunda tabla, te traía todos los
resultados igual (con ruta en NULL, calculo). Si hubieses unido sólo
con JOIN, el resultado hubiese sido probablemente el que buscabas.

Igualmente, de la forma que lo escribiste es mucho más claro, más
mantenible, ya que diferencias las condiciones de la unión de las
condiciones generales de la consulta. Así es más simple agregar tablas
y hacer más compleja la consulta (si tenés que hacerlo algún día).

También quedaría mucho más legible saber de qué tablas vienen todos
campos que usas, para lo que podés usar alias de tablas, por ejemplo:

$qry="SELECT e.id AS id, e.fecha, e.titulo, e.copete, e.descripcion,
ea.ruta AS img
          FROM entradas AS e
          LEFT JOIN entradas_attch AS ea
          ON e.id=ea.id_entrada AND ea.tipo='img'
          WHERE e.seccion='$seccion' AND e.stat=1
          GROUP BY e.id";


Saludos!


El 1 de enero de 2011 17:54, Silverzero <silverzero.52 en gmail.com> escribió:
>
> Hola  a todos!
>
> Primero que nada, felicidades para todos y que todos sus deseas lleguen a concretarse en este nuevo ciclo, según el Papa Gregorio XIII.
> Aunque mejor podríamos haber estado celebrando la edad de la tierra, entre unos 4400-5100 millones de años...o la aparición del Homo Sapiens hace unos 2,5 millones de años...o celebrar el comienzo de la civilización humana a partir de la existencia de los Sumerios, por lo que estaríamos festejando un año entre 6500 y 6700.
> Bueno, pero más allá de eso, este mensaje tiene su origen en una consulta mysql que en este primer día del 2011 pude realizar y quería compartirla (aunque pueda ser bastante fácil yo no la había cazado che, me costó bastante)...siempre hay una consulta que te complica y esta fue una de esas...tal vez a alguien le sirve.
>
> tengo una tabla donde se insertan publicaciones: (id, titulo, copete, descripcion, estado, seccion)
> tengo otro tabla con los adjuntos de las publicaciones: (id, id_entrada, tipo de adjunto, ruta)
>
> yo quería filtrar todas las publicaciones de la seccion "noticias" que tuvieran o no un archivo adjunto de tipo imagen.
>
> mi primera consulta fue:
>
> $qry="SELECT entradas.id AS id, fecha, titulo, copete, descripcion, ruta AS img
>           FROM  entradas LEFT JOIN entradas_attch
>           ON entradas.id=id_entrada AND tipo='img' AND seccion='noticias' AND stat=1
>           GROUP BY entradas.id";
>
> pero esto me listaba todas las publicaciones, tengan o no imágenes y sean o no de la sección noticias...
> yo pense que con la claúsula ON filtraba los resultados correspondientes a la relación de las dos tablas y las de cada una en particular, pero parece que no, así que necesito agregar una cláusula WHERE para filtrar los campos de la tabla "entradas", con lo que me queda algo así.
>
> $qry="SELECT entradas.id AS id,fecha, titulo, copete, descripcion, ruta AS img
>           FROM entradas LEFT JOIN entradas_attch
>           ON entradas.id=id_entrada AND tipo='img'
>           WHERE seccion='$seccion' AND stat=1
>           GROUP BY entradas.id";
>
> Y ahí me anduvo bien!!!
> Espero que a alguien le sirva!
>
> Saludos y buenas ondas para esta nueva vuelta al sol!
> --
> Carolina
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado



--
Matias Fernando Gea
matigea en gmail.com
http://www.mfgea.com.ar


Más información sobre la lista de distribución Php-avanzado