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

[SOLUCIONADO] Ultimo registro de un GROUP BY

Estas en el tema de Ultimo registro de un GROUP BY en el foro de Mysql en Foros del Web. Buenas gente del foro, tengo una consulta que trae un conjunto de mensajes agrupados por el id de una conversación (idConversacion). Basado en esta consulta, ...
  #1 (permalink)  
Antiguo 08/11/2013, 11:46
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Ultimo registro de un GROUP BY

Buenas gente del foro, tengo una consulta que trae un conjunto de mensajes agrupados por el id de una conversación (idConversacion).
Basado en esta consulta, cree un sistema de notificaciones donde me muestra el ultimo mensaje de cada conversacion. El problema es que no muestra correctamente la fecha y hora. Es decir, muestra la fecha y hora del primer mensaje de cada GROUP BY... no la ultima.
Se que hay que ordenar antes de agrupar, pero no logre dar en la tecla.
Algun comentario? gracias!

Código MySQL:
Ver original
  1. SELECT a.id, a.fecha, DATE_FORMAT(fecha,'%d-%m-%Y') as dia, DATE_FORMAT(fecha,', %H:%i') as hora, a.idConversacion as idConversacion, a.idUsuario, b.id, b.asunto, b.ref, c.id, c.nombres, c.apellidos, d.id as idProp, d.calle, d.numero, d.piso, d.depto, e.id, e.idUsuario, e.idConversacion, e.checked_2
  2. FROM `mensajes`
  3. AS a INNER JOIN `conversaciones`
  4. AS b ON (b.id = a.idConversacion) INNER JOIN `usuarios`
  5. AS c ON (c.id = a.idUsuario) INNER JOIN `propiedades`
  6. AS d ON (d.id = b.ref) INNER JOIN `mjs_alertas`
  7. AS e ON (e.idUsuario = {$_SESSION['id']}
  8. e.idConversacion = a.idConversacion AND e.checked_2 = '0')
  9. a.idUsuario != {$_SESSION['id']}
  10. GROUP BY a.idConversacion
  11. ORDER BY a.fecha DESC
  #2 (permalink)  
Antiguo 08/11/2013, 12:01
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: Ultimo registro de un GROUP BY

Tienes varios defectos de construicción que peuden causar errores.
Yo la iría planteando por este lado:
Código MySQL:
Ver original
  1.     id,
  2.     fecha,
  3.     dia,
  4.     hora,
  5.     idConversacion,
  6.     idUsuario,
  7.     asunto,
  8.     ref,
  9.     nombres,
  10.     apellidos,
  11.     idProp,
  12.     calle,
  13.     numero,
  14.     piso,
  15.     depto,
  16.     idUsuario,
  17.     checked_2
  18.              a.id,
  19.              a.fecha,
  20.              DATE_FORMAT(fecha,'%d-%m-%Y') dia,
  21.              DATE_FORMAT(fecha,', %H:%i') hora,
  22.              a.idConversacion idConversacion,
  23.              a.idUsuario,
  24.              b.id,
  25.              b.asunto,
  26.              b.ref,
  27.              c.id,
  28.              c.nombres,
  29.              c.apellidos,
  30.              d.id as idProp,
  31.              d.calle,
  32.              d.numero,
  33.              d.piso,
  34.              d.depto,
  35.              e.id,
  36.              e.idUsuario,
  37.              e.idConversacion,
  38.              e.checked_2
  39.     FROM `mensajes`  a
  40.         INNER JOIN `conversaciones`  b ON b.id = a.idConversacion
  41.         INNER JOIN `usuarios` c ON c.id = a.idUsuario
  42.         INNER JOIN `propiedades` d ON d.id = b.ref
  43.         INNER JOIN `mjs_alertas` e ON e.idUsuario = a.idUsuario AND  e.idConversacion = a.idConversacion
  44.     WHERE e.idUsuario = {$_SESSION['id']}
  45.         AND e.checked_2 = '0')
  46.     ORDER BY a.fecha DESC) T1
  47. GROUP BY idConversacion
__________________
¿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 08/11/2013, 12:16
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes varios defectos de construicción que peuden causar errores.
Yo la iría planteando por este lado:
Código MySQL:
Ver original
  1.     id,
  2.     fecha,
  3.     dia,
  4.     hora,
  5.     idConversacion,
  6.     idUsuario,
  7.     asunto,
  8.     ref,
  9.     nombres,
  10.     apellidos,
  11.     idProp,
  12.     calle,
  13.     numero,
  14.     piso,
  15.     depto,
  16.     idUsuario,
  17.     checked_2
  18.              a.id,
  19.              a.fecha,
  20.              DATE_FORMAT(fecha,'%d-%m-%Y') dia,
  21.              DATE_FORMAT(fecha,', %H:%i') hora,
  22.              a.idConversacion idConversacion,
  23.              a.idUsuario,
  24.              b.id,
  25.              b.asunto,
  26.              b.ref,
  27.              c.id,
  28.              c.nombres,
  29.              c.apellidos,
  30.              d.id as idProp,
  31.              d.calle,
  32.              d.numero,
  33.              d.piso,
  34.              d.depto,
  35.              e.id,
  36.              e.idUsuario,
  37.              e.idConversacion,
  38.              e.checked_2
  39.     FROM `mensajes`  a
  40.         INNER JOIN `conversaciones`  b ON b.id = a.idConversacion
  41.         INNER JOIN `usuarios` c ON c.id = a.idUsuario
  42.         INNER JOIN `propiedades` d ON d.id = b.ref
  43.         INNER JOIN `mjs_alertas` e ON e.idUsuario = a.idUsuario AND  e.idConversacion = a.idConversacion
  44.     WHERE e.idUsuario = {$_SESSION['id']}
  45.         AND e.checked_2 = '0')
  46.     ORDER BY a.fecha DESC) T1
  47. GROUP BY idConversacion
Acomode la estructura tal cual me decis, y la revise. Me parecio ok, pero arrojo:


Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\oppel_inmobiliaria\modulos\ini.php on line...
  #4 (permalink)  
Antiguo 08/11/2013, 12:32
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

<saludos>
Este mensaje nuevo ya no es problema del query sino de como lo
implementas en php
Sin embargo te sugiero que primero valides el query que te construyó

gnzsoloyo
pero directamente en phpmyadmin o workbrench o en el ide que
ocupes para realizar los querys directos a la bd, pues esto fue la causa del post,
y una vez soluciones esto, pases a revisar el tema del query en el php

Sin embargo al vuelo, parece que no le estas pasando una variable de tipo result
a mysql_fetch_assoc, sino le envías otra variable de tipo boolean
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 08/11/2013, 12:44
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por mortiprogramador Ver Mensaje
[COLOR=Purple]<saludos>
gnzsoloyo
pero directamente en phpmyadmin o workbrench o en el ide que
ocupes para realizar los querys directos a la bd, pues esto fue la causa del post,
y una vez soluciones esto, pases a revisar el tema del query en el php
Analice directamente en phpMyAdmin, y me dice que cada tabla derivada debe tener su propio alias. Yo en la consulta veo que todas las tablas lo tienen...
  #6 (permalink)  
Antiguo 08/11/2013, 13:04
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: Ultimo registro de un GROUP BY

Cita:
Iniciado por chuekeron Ver Mensaje
Analice directamente en phpMyAdmin, y me dice que cada tabla derivada debe tener su propio alias. Yo en la consulta veo que todas las tablas lo tienen...
O sea que no copiaste y pegaste...
Fíjate esto:

Código SQL:
Ver original
  1. ORDER BY a.fecha DESC) T1
¿Ves ese "T1"?
Es un alias para la tabla derivda generada en la consulta primaria.
Es decir, cuando pones una subconsulta en el FROM de otra, se genera una tabla derivada, y es esa tabla la que debe tener alias:
Código MySQL:
Ver original
  1. SELECT a, b, c
  2. FROM (SELECT a, b, c FROM Tabla1) T1 -- Este es un alias de la tyabla derivada
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/11/2013, 13:14
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por gnzsoloyo Ver Mensaje
O sea que no copiaste y pegaste...
Fíjate esto:

Código SQL:
Ver original
  1. ORDER BY a.fecha DESC) T1
¿Ves ese "T1"?
[/HIGHLIGHT]
Claro que lo vi, y no tendria porque sacarlo. La consulta que ejecute en phpMyAdmin es la misma q vos me pusiste:

Código MySQL:
Ver original
  1.     id,
  2.     fecha,
  3.     dia,
  4.     hora,
  5.     idConversacion,
  6.     idUsuario,
  7.     asunto,
  8.     ref,
  9.     nombres,
  10.     apellidos,
  11.     idProp,
  12.     calle,
  13.     numero,
  14.     piso,
  15.     depto,
  16.     idUsuario,
  17.     checked_2
  18.              a.id,
  19.              a.fecha,
  20.              DATE_FORMAT(fecha,'%d-%m-%Y') dia,
  21.              DATE_FORMAT(fecha,', %H:%i') hora,
  22.              a.idConversacion idConversacion,
  23.              a.idUsuario,
  24.              b.id,
  25.              b.asunto,
  26.              b.ref,
  27.              c.id,
  28.              c.nombres,
  29.              c.apellidos,
  30.              d.id as idProp,
  31.              d.calle,
  32.              d.numero,
  33.              d.piso,
  34.              d.depto,
  35.              e.id,
  36.              e.idUsuario,
  37.              e.idConversacion,
  38.              e.checked_2
  39.     FROM `mensajes`  a
  40.         INNER JOIN `conversaciones`  b ON b.id = a.idConversacion
  41.         INNER JOIN `usuarios` c ON c.id = a.idUsuario
  42.         INNER JOIN `propiedades` d ON d.id = b.ref
  43.         INNER JOIN `mjs_alertas` e ON e.idUsuario = a.idUsuario AND  e.idConversacion = a.idConversacion
  44.     WHERE e.idUsuario = '1'
  45.         AND e.checked_2 = '0')
  46.     ORDER BY a.fecha DESC) T1
  47. GROUP BY idConversacion
  #8 (permalink)  
Antiguo 08/11/2013, 13:24
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

<saludos>
Seguro que sería más interesante que se reunieran, ya que al parecer tienen la misma ubicación geográfica!!!
Sin embargo, de nuevo en el caso, personalmente quisiera tener tablas y datos,
no se si te sea posible agregar los querys de creación de tablas y algunos datos para probar
Por si acaso, el T1 no necesita un as? pues normalmente no, pero pues... prueba, y por otro lado, que versión de mysql tienes? tal vez no sea la misma de

gnzsoloyo
(aunque ya son ideas delirantes)
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 08/11/2013, 13:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ultimo registro de un GROUP BY

Creo que se añadió un cierre de paréntesis de más. Me refiero al que aparece tras '0'. Creo que ese cierre creaba una estructura de tabla sin alias. Prueba con esto ahora.
Código MySQL:
Ver original
  1.         id,
  2.         fecha,
  3.         dia,
  4.         hora,
  5.         idConversacion,
  6.         idUsuario,
  7.         asunto,
  8.         ref,
  9.         nombres,
  10.         apellidos,
  11.         idProp,
  12.         calle,
  13.         numero,
  14.         piso,
  15.         depto,
  16.         idUsuario,
  17.         checked_2
  18.     FROM (SELECT
  19.                  a.id,
  20.                  a.fecha,
  21.                  DATE_FORMAT(fecha,'%d-%m-%Y') dia,
  22.                  DATE_FORMAT(fecha,', %H:%i') hora,
  23.                  a.idConversacion idConversacion,
  24.                  a.idUsuario,
  25.                  b.id,
  26.                  b.asunto,
  27.                  b.ref,
  28.                  c.id,
  29.                  c.nombres,
  30.                  c.apellidos,
  31.                  d.id as idProp,
  32.                  d.calle,
  33.                  d.numero,
  34.                  d.piso,
  35.                  d.depto,
  36.                  e.id,
  37.                  e.idUsuario,
  38.                  e.idConversacion,
  39.                  e.checked_2
  40.         FROM `mensajes`  a
  41.             INNER JOIN `conversaciones`  b ON b.id = a.idConversacion
  42.             INNER JOIN `usuarios` c ON c.id = a.idUsuario
  43.             INNER JOIN `propiedades` d ON d.id = b.ref
  44.             INNER JOIN `mjs_alertas` e ON e.idUsuario = a.idUsuario AND  e.idConversacion = a.idConversacion
  45.         WHERE e.idUsuario = {$_SESSION['id']}
  46.             AND e.checked_2 = '0'
  47.         ORDER BY a.fecha DESC) T1
  48.     GROUP BY idConversacion
  #10 (permalink)  
Antiguo 08/11/2013, 13:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

<saludos>
Hombre de letras, jurena!!!
Joer, como dicen en tu tierra!! que ojo tienes chaval!!!
Pero lo raro es, ese query tal cual yo creo que lo transcribió

gnzsoloyo de su editor, y por ende diría que le funcionó...
Bueno, esperemos a ver que comentan los presuntos implicados...
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 08/11/2013, 13:36
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Seguro que sería más interesante que se reunieran, ya que al parecer tienen la misma ubicación geográfica!!!
Sin embargo, de nuevo en el caso, personalmente quisiera tener tablas y datos,
no se si te sea posible agregar los querys de creación de tablas y algunos datos para probar
Por si acaso, el T1 no necesita un as? pues normalmente no, pero pues... prueba, y por otro lado, que versión de mysql tienes? tal vez no sea la misma de

gnzsoloyo
(aunque ya son ideas delirantes)
</saludos>
Ya probe agregando los respectivos AS por si acaso, la version es 5.5.27... dudo que vengan x ese lado los problemas. Hay algo q falta o no esta bien en la consulta, pero no logro resolver que es.
  #12 (permalink)  
Antiguo 08/11/2013, 13:38
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

<saludos>
chuekeron, revisa lo que te dice jurena y nos cuentas!
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #13 (permalink)  
Antiguo 08/11/2013, 14:20
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: Ultimo registro de un GROUP BY

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Seguro que sería más interesante que se reunieran, ya que al parecer tienen la misma ubicación geográfica!!!
Sin embargo, de nuevo en el caso, personalmente quisiera tener tablas y datos,
no se si te sea posible agregar los querys de creación de tablas y algunos datos para probar
Por si acaso, el T1 no necesita un as? pues normalmente no, pero pues... prueba, y por otro lado, que versión de mysql tienes? tal vez no sea la misma de

gnzsoloyo
(aunque ya son ideas delirantes)
</saludos>
No @mortiprogramador, el AS es obsoleto en todos los DBMS. Se quitó del estandar ANSI-SQL hace años, y sólo se conserva su uso por compatibilidad con versiones viejas.
De hecho, en las empresas de desarrollo es muy habitual (en las que yo he trabajado y trabajo hoy), que las especificaciones de desarrollo indique expresamente que no se deben poner AS en ninguna circunstancias, sea en MySQL, Oracle o SQL Server.
Los analistas funcionales de nuestra empresa, por lo pronto, rechazan cualquier script que contenga un AS, para que sean reescritos.

Por otro lado, para lo único que sirven es para ensuciar el código, pero ya no tienen utilidad.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 08/11/2013, 14:46
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No @mortiprogramador, el AS es obsoleto en todos los DBMS. Se quitó del estandar ANSI-SQL hace años, y sólo se conserva su uso por compatibilidad con versiones viejas.
De hecho, en las empresas de desarrollo es muy habitual (en las que yo he trabajado y trabajo hoy), que las especificaciones de desarrollo indique expresamente que no se deben poner AS en ninguna circunstancias, sea en MySQL, Oracle o SQL Server.
Los analistas funcionales de nuestra empresa, por lo pronto, rechazan cualquier script que contenga un AS, para que sean reescritos.

Por otro lado, para lo único que sirven es para ensuciar el código, pero ya no tienen utilidad.
<saludos>
Jo, @gnzsoloyo, en serio!!!
Pero entonces me surge una duda, el AS no lo usan para los tipos de script que acabaste de crear, o incluso para campos simples tampoco?
Por ej digamos esto


Código SQL:
Ver original
  1. SELECT a.nombre, b.nombre FROM tabla1 a INNER JOIN tabla2 b ON ....
  2. -- Yo suelo usarlo como
  3. SELECT a.nombre AS n1, b.nombre AS n2 FROM tabla1 a INNER JOIN tabla2 b ON ....
Esto por una razón primordial, y es ya irnos al ámbito de programación,
donde por ej al obtener un array de este query, sin el AS se obtendrían dos campos llamados "nombre"
Y si el array obtenido es asociativo, es decir, no pasa de posiciones por números sino por nombre de campo, al tratar de dibujar la información del campo nombre, normalmente lo que va a pasar es que va a dibujar en 2 campos la info del campo de bd a.nombre

Mi pregunta entonces es, como lo resuelven?
Si bien tal vez por programación se puedan hacer artimañas,
me parece mejor ponerle alias a los campos y pues ya con eso son únicos (claro, siempre y cuando uno tenga ese cuidado!)

Me gustaria saber un poco más de como se maneja eso en donde estás, thanks
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #15 (permalink)  
Antiguo 08/11/2013, 14:57
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: Ultimo registro de un GROUP BY

Cita:
el AS no lo usan para los tipos de script que acabaste de crear, o incluso para campos simples tampoco
Para ninguno.
La cláusula es obsoleta.
El sólo poner un alias a continuación del nombre del objeto (tabla, columna, funcion aplicada a una columna, etc), es suficiente. El DBMS interpretará cualquier cosa que siga al objeto de base de datos como un alias y procederá en consecuencia.
El AS es inútil. Sólo sirve para molestar en el código...
Cita:
Esto por una razón primordial, y es ya irnos al ámbito de programación,
donde por ej al obtener un array de este query, sin el AS se obtendrían dos campos llamados "nombre"
En programación no necesitas los nombres, con los subíndices alcanza, y de todos modos poniendoles el alias sin el AS, lo tomará, porque el alias no depende del lenguaje. depende del DBMS. Es el servidor quien lo entrega, y el lenguaje nuca sabrá si es un alias o un nombre de columna.
Servidor de BBDD y Lenguaje son entidades diferentes e independientes.
Cita:
me parece mejor ponerle alias a los campos
Como dije, yo jamás dije que no le pongas alias, sólo recalco que el AS es obsoleto. El alias no necesita del AS para ser tomado como alias.

Tomando tu propio ejemplo, lo puedes escribir:
Código MySQL:
Ver original
  1. SELECT a.nombre n1, b.nombre n2
  2. FROM tabla1 a INNER JOIN tabla2 b ON ....
Vamos a lo simple: Pr,uebalo con cualquier consulta en cualquier DBMS y verifica lo que te digo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 08/11/2013, 15:32
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Para ninguno.
La cláusula es obsoleta.
El sólo poner un alias a continuación del nombre del objeto (tabla, columna, funcion aplicada a una columna, etc), es suficiente. El DBMS interpretará cualquier cosa que siga al objeto de base de datos como un alias y procederá en consecuencia.
El AS es inútil. Sólo sirve para molestar en el código...

En programación no necesitas los nombres, con los subíndices alcanza, y de todos modos poniendoles el alias sin el AS, lo tomará, porque el alias no depende del lenguaje. depende del DBMS. Es el servidor quien lo entrega, y el lenguaje nuca sabrá si es un alias o un nombre de columna.
Servidor de BBDD y Lenguaje son entidades diferentes e independientes.

Como dije, yo jamás dije que no le pongas alias, sólo recalco que el AS es obsoleto. El alias no necesita del AS para ser tomado como alias.

Tomando tu propio ejemplo, lo puedes escribir:
Código MySQL:
Ver original
  1. SELECT a.nombre n1, b.nombre n2
  2. FROM tabla1 a INNER JOIN tabla2 b ON ....
Vamos a lo simple: Pr,uebalo con cualquier consulta en cualquier DBMS y verifica lo que te digo.
<saludos>
Rayos, ahora por fin capté lo que me querías decir!
Hacer un "AS" sin "AS" es!!!
Jo, me enrede yo solo!
En efecto, acabé de probar y funca sin problemas, thanks!

Ehm, que pena molestar tanto, pero es que no me pude quedar con las ganas, y quisiera saber de
cual fuente salió el tema del obsoleto AS?


Lo pregunto porque vengo de pasear por la página de mysql y encontré esto

En resumidas cuentas lo agrego a continuación (donde incluso ellos refieren que es buena práctica usar el AS)

Una select_expr puede tener un alias usando AS alias_name. El alias se usa como el nombre de columna de la expresión y puede usarse en cláusulas GROUP BY, ORDER BY, o HAVING . Por ejemplo:
mysql> SELECT CONCAT(last_name,', ',first_name) AS full_name -> FROM mytable ORDER BY full_name; La palabra clave AS es opcional cuando se usa un alias para select_expr. El ejemplo precedente podría haberse escrito como:
mysql> SELECT CONCAT(last_name,', ',first_name) full_name -> FROM mytable ORDER BY full_name; Como AS es opcional, puede ocurrir un sutil problema si olvida la coma entre dos expresiones select_expr : MySQL interpreta el segundo como un nombre de alias. Por ejemplo, en el siguiente comando, columnb se tata como un nombre de alias:
mysql> SELECT columna columnb FROM mytable; Por esta razón, es una buena práctica poner los alias de columnas usando AS.

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 08/11/2013 a las 15:46
  #17 (permalink)  
Antiguo 09/11/2013, 11:22
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por jurena Ver Mensaje
Creo que se añadió un cierre de paréntesis de más.
Gracias Jurena, ahí estaba el primer error. Pero ahora me arroja que varios de los id que utilizo están duplicados (#1060 - Duplicate column name 'id').
Lo mismo con idUsuario, no se porque lo hace cuando tienen el prefijo que asocia el campo a su respectiva tabla.
  #18 (permalink)  
Antiguo 09/11/2013, 12:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ultimo registro de un GROUP BY

Cita:
Iniciado por chuekeron Ver Mensaje
Gracias Jurena, ahí estaba el primer error. Pero ahora me arroja que varios de los id que utilizo están duplicados (#1060 - Duplicate column name 'id').
Lo mismo con idUsuario, no se porque lo hace cuando tienen el prefijo que asocia el campo a su respectiva tabla.
<saludos>
Pues en el query se ven varios campos id, porque no intentas ponerle alias a todos y vuelves a intentar?
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #19 (permalink)  
Antiguo 09/11/2013, 13:22
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Ultimo registro de un GROUP BY

Bueno, finalmente la consulta quedo como la pongo a continuación... y funcionando.
Cualquier critica y/o comentario es bienvenido...


Código MySQL:
Ver original
  1. SELECT t4_id,
  2.        fecha,
  3.        dia,
  4.        hora,
  5.        t5_idConversacion,
  6.        asunto,
  7.        ref,
  8.        nombres,
  9.        apellidos,
  10.        calle,
  11.        numero,
  12.        piso,
  13.        depto,
  14.        t5_idUsuario,
  15.        checked_2
  16.   FROM
  17.   (SELECT t1.id t1_id,
  18.           t1.fecha,
  19.           DATE_FORMAT(fecha,'%d-%m-%Y') dia,
  20.           DATE_FORMAT(fecha,', %H:%i') hora,
  21.           t1.idConversacion t1_idConversacion,
  22.           t1.idUsuario t1_idUsuario,
  23.           t2.id t2_id,
  24.           t2.asunto,
  25.           t2.ref,
  26.           t3.id t3_id,
  27.           t3.nombres,
  28.           t3.apellidos,
  29.           t4.id t4_id,
  30.           t4.calle,
  31.           t4.numero,
  32.           t4.piso,
  33.           t4.depto,
  34.           t5.idUsuario t5_idUsuario,
  35.           t5.idConversacion t5_idConversacion,
  36.           t5.checked_2
  37.    FROM `mensajes` t1
  38.    INNER JOIN `conversaciones` t2 ON t2.id = t1.idConversacion
  39.    INNER JOIN `usuarios` t3 ON t3.id = t1.idUsuario
  40.    INNER JOIN `propiedades` t4 ON t4.id = t2.REF
  41.    INNER JOIN `mjs_alertas` t5 ON t5.idUsuario = {$_SESSION['id']}
  42.    AND t5.idConversacion = t1.idConversacion
  43.    WHERE t5.checked_2 = '0'
  44.    ORDER BY t1.fecha DESC) t6
  45. GROUP BY t1_idConversacion

Etiquetas: group, join, registro, select, ultimo
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 22:38.