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

Problema con SELECT MAX

Estas en el tema de Problema con SELECT MAX en el foro de Mysql en Foros del Web. Buenas, Mi objetivo es que muestre la lista de usuarios con su informacion de cada campo (nombre, nivel, dinero, etc). y su ULTIMA fecha de ...
  #1 (permalink)  
Antiguo 16/04/2009, 07:28
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Problema: SELECT MAX (Lista de usuarios y ultima conexion)

Buenas,



Mi objetivo es que muestre la lista de usuarios con su informacion de cada campo (nombre, nivel, dinero, etc). y su ULTIMA fecha de CONEXION.

He probado con ... SELECT MAX logins.time, logins.userid, ... pero da error de consulta.


Con esa consulta me muestra la lista de usuarios pero con todas sus conexiones :S
Esta es mi consulta:

$consulta = "SELECT logins.time, logins.userid, clientes.Name, clientes.Money, clientes.ConnectedTime FROM logins, clientes WHERE logins.userid = clientes.id ORDER BY ".$nombre." ".$tipo." ";

El ORDER BY es dinámico, sería la opción de cada título de la tabla (Ejemplo: Nombre,ASC)


Saludos

Edito:
Estructura de las tablas relacionadas:

(clientes.id = logins.userid)

i43.tinypic.com/x0taxl.jpg
(No me deja ponerla con BBCode por problemas de antiguedad de cuenta)

Última edición por Chmlls; 17/04/2009 a las 07:59 Razón: Imágenes
  #2 (permalink)  
Antiguo 16/04/2009, 07:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

Describe un poco mas la estructura de tus tablas.

El campo donde guardas la fehca manejalo asi:

Código mysql:
Ver original
  1. SELECT logins.time, logins.userid, clientes.Name,
  2. clientes.Money, clientes.ConnectedTime FROM logins, clientes where
  3. logins.userid = clientes.id and fecha_conexion =
  4. (select max(fecha_con) from tabla where userid=cualquiera);

Como no conozco tus campos ni la estructura de tus tablas, es un ejemplo genérico.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/04/2009, 18:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

Lleva razón huesos52. Debes decirnos algo sobre la estructura de tus tablas y las relaciones entre ellas.
Pero si lo que quieres es tener el dato de cada cliente y su última time de logins, deberías probar algo como esto. Yo no lo he probado
SELECT logins.time, logins.userid, clientes.Name, clientes.Money, clientes.ConnectedTime FROM logins INNER JOIN clientes ON logins.userid = clientes.id INNER JOIN (select max(time) maximo, userid USER FROM logins GROUP BY userid)t1 ON t1.USER = logins.userid AND t1.maximo = logins.time
  #4 (permalink)  
Antiguo 17/04/2009, 01:41
 
Fecha de Ingreso: abril-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con SELECT MAX

Esto te tendría que valer:

"SELECT max(logins.time), logins.userid, clientes.Name, clientes.Money, clientes.ConnectedTime FROM logins, clientes WHERE logins.userid = clientes.id group by logins.userid"

Saludos

Última edición por irogus; 17/04/2009 a las 01:52
  #5 (permalink)  
Antiguo 17/04/2009, 08:23
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Actualizado el primer mensaje

Lo he intentado con vuestras consultas pero no logro que funcione. :S

Última edición por Chmlls; 17/04/2009 a las 09:23
  #6 (permalink)  
Antiguo 17/04/2009, 08:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

envíanos la estructura de las tablas con algunos datos y ya verás cómo esto sale...
Exporta la base con algunos datos y ponnos el texto del archivo sql para que podamos ver el tipo de campos que utilizas. Acláranos también que deberías obtener con los datos que nos envíes.
  #7 (permalink)  
Antiguo 17/04/2009, 09:22
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Cita:
Iniciado por jurena Ver Mensaje
envíanos la estructura de las tablas con algunos datos y ya verás cómo esto sale...
Exporta la base con algunos datos y ponnos el texto del archivo sql para que podamos ver el tipo de campos que utilizas. Acláranos también que deberías obtener con los datos que nos envíes.
¿Te refieres al primer post? Deje esta imagen de la estructura i43.tinypic.com/x0taxl.jpg :)




Lo que quiero es esto (ver url imagen mas abajo)
PERO sin las consultas de ultima conexion duplicadas, en esta imagen salen la lista de usuarios con sus ultimas conexiones, el problema es que salen TODOS sus logins en el sistema y solo quiero que muestre su ultima conexion.

i43.tinypic.com/2mcfyxi.jpg
  #8 (permalink)  
Antiguo 17/04/2009, 09:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

He visto la estructura y tus tablas.

Pero cual es la consulta especifica que te genera la salida que muestras? Puedes ponerla por favor?

clientes.connectedtime no lo veo en tu tabla clientes. A que equivale actividad? que campo de la consulta es el que muestra?

La salida tiene 7 campos, tu consulta en el post inicial tiene 5. Y hay campos que no corresponden.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 17/04/2009, 10:13
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Cita:
Iniciado por huesos52 Ver Mensaje
He visto la estructura y tus tablas.

Pero cual es la consulta especifica que te genera la salida que muestras? Puedes ponerla por favor?

clientes.connectedtime no lo veo en tu tabla clientes. A que equivale actividad? que campo de la consulta es el que muestra?

La salida tiene 7 campos, tu consulta en el post inicial tiene 5. Y hay campos que no corresponden.
clientes.connectedtime no influye, es una estadistica sin ninguna relevancia, como puede ser Age, Sex o otros muchos campos que no utilizo en esta consulta. Seria como la lista de usuarios con un perfil muy basico.

Muestra la lista de usuarios con su nombre, dinero, etc de la tabla 'clientes'.

A mayores necesito saber su fecha de ultima conexion que está en 'logins.time' en esa lista de usuarios.
  #10 (permalink)  
Antiguo 17/04/2009, 10:17
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

Al final de la sentencia puedes poner:

order by logins.time desc limit 1;

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 17/04/2009, 10:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

O también
Código sql:
Ver original
  1. $consulta = "SELECT logins.time, logins.userid, clientes.Name,
  2. clientes.Money, clientes.ConnectedTime FROM logins, clientes
  3. WHERE logins.userid = clientes.id and
  4. logins.time = (select max(time) from logins)
  5. ORDER BY ".$nombre." ".$tipo." ";
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 17/04/2009, 10:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

Insisto: ¿qué error te da esta consulta?

SELECT logins.time, logins.userid, clientes.Name, clientes.Money, clientes.ConnectedTime FROM logins INNER JOIN clientes ON logins.userid = clientes.id INNER JOIN (select max(time) maximo, userid USER FROM logins GROUP BY userid)t1 ON t1.USER = logins.userid AND t1.maximo = logins.time
  #13 (permalink)  
Antiguo 17/04/2009, 10:47
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Cita:
Iniciado por huesos52 Ver Mensaje
O también
Código sql:
Ver original
  1. $consulta = "SELECT logins.time, logins.userid, clientes.Name,
  2. clientes.Money, clientes.ConnectedTime FROM logins, clientes
  3. WHERE logins.userid = clientes.id and
  4. logins.time = (select max(time) from logins)
  5. ORDER BY ".$nombre." ".$tipo." ";
Código:
    $_pagi_sql = "SELECT 
					logins.time, 
					logins.userid, 
					clientes.Name, 
					clientes.Money, 
					clientes.Bank, 
					clientes.DonateRank, 
					clientes.Locked, 
					clientes.ConnectedTime, 
					clientes.Linked	
				FROM logins, clientes
				WHERE logins.userid = clientes.id 
				AND logins.time = (select max(time) from logins) 
				ORDER BY ".$nombre." ".$tipo." ";
Ejecuto esta consulta con tu ayuda y me da error:

Código:
Error en la consulta de conteo de registros: SELECT COUNT(*) FROM logins) ORDER BY Name desc . Mysql dijo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY Name desc' at line 1

Consulta orignal donde salen todas las fechas en la lista de usuarios:
Código:
    $_pagi_sql = "SELECT 
					logins.time, 
					logins.userid, 
					clientes.Name, 
					clientes.Money, 
					clientes.Bank, 
					clientes.DonateRank, 
					clientes.Locked, 
					clientes.ConnectedTime, 
					clientes.Linked  	
				FROM logins, clientes
				WHERE logins.userid = clientes.id 
				
				ORDER BY ".$nombre." ".$tipo." ";
  #14 (permalink)  
Antiguo 17/04/2009, 10:54
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Cita:
Iniciado por jurena Ver Mensaje
Insisto: ¿qué error te da esta consulta?

SELECT logins.time, logins.userid, clientes.Name, clientes.Money, clientes.ConnectedTime FROM logins INNER JOIN clientes ON logins.userid = clientes.id INNER JOIN (select max(time) maximo, userid USER FROM logins GROUP BY userid)t1 ON t1.USER = logins.userid AND t1.maximo = logins.time
Disculpa no publicar con anteriodad el error que me da esa consulta.

Código:
Error en la consulta de conteo de registros: SELECT COUNT(*) FROM logins GROUP BY userid)t1 ON t1.USER = logins.userid AND t1.maximo = logins.time. Mysql dijo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')t1 ON t1.USER = logins.userid AND t1.maximo = logins.time' at line 2
La consulta es la siguiente en ese caso:
Código:
	$_pagi_sql = "SELECT logins.time, 
					logins.time, 
					logins.userid, 
					clientes.Name, 
					clientes.Money, 
					clientes.Bank, 
					clientes.DonateRank, 
					clientes.Locked, 
					clientes.ConnectedTime, 
					clientes.Linked	
				FROM logins 
				INNER JOIN clientes
				ON logins.userid = clientes.id 
				INNER JOIN (select max(time) maximo, userid 
				USER FROM logins 
				GROUP BY userid)t1 
				ON t1.USER = logins.userid AND t1.maximo = logins.time";
  #15 (permalink)  
Antiguo 17/04/2009, 13:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

Vaya!!! te estaba haciendo perder el tiempo.
La cosa va por donde dice jurena.

Fijate que en los parametros que llamas en el select, estas llamando 2 veces logins.time.
Quitale uno y vuelve a probar.

Código mysql:
Ver original
  1. SELECT logins.time, logins.userid, clientes.Name,
  2. clientes.Money, clientes.Bank, clientes.DonateRank,
  3. clientes.Locked, clientes.ConnectedTime, clientes.Linked   
  4. FROM logins
  5. INNER JOIN clientes
  6. ON logins.userid = clientes.id
  7. INNER JOIN (select max(time) maximo, userid
  8. USER FROM logins
  9. GROUP BY userid)t1
  10. ON t1.USER = logins.userid AND t1.maximo = logins.time;

Espero esta vez si te funcione.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #16 (permalink)  
Antiguo 17/04/2009, 14:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

perdonadme, me ausenté, pero ahora me surge una duda, ¿no será el problema que estás usando como nombre de campo, TIME, una palabra de esas llamadas reservadas? Prueba cambiando el nombre de campo a TIME2 en tu tabla y luego haz la consulta que te propuse escribiendo TIME2 en lugar de time. Si no deseas cambiarlo, puedes escribirlo así: `TIME`
pero yo te aconsejo el cambio de nombre si la programación no la tienes muy avanzada. Probablemente la expresión MAX(TIME) o alguna otra donde aparece el nombre, te está causando el problema. Prueba con la última consulta que te ha recomendado huesos52, pero tras cambiar el nombre del campo y poner el nuevo nombre. Observa cómo en el código que ha escrito huesos52 se marca en azul, como si se tratase de una función.
Creo que es eso...

Última edición por jurena; 18/04/2009 a las 01:41
  #17 (permalink)  
Antiguo 17/04/2009, 14:39
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

<mensaje eliminado por el autor>

Última edición por Chmlls; 20/04/2009 a las 03:09 Razón: Borrado, sin relevancia
  #18 (permalink)  
Antiguo 17/04/2009, 14:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

¿no has cambiado el nombre del campo, verdad?
porque sigo viendo logins.time en el reporte del error. Tienes que cambiar el nombre time a time2 en la base y en todos los lugares de la consulta donde escribías time debes escribir time2.
  #19 (permalink)  
Antiguo 18/04/2009, 12:11
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Cita:
Iniciado por jurena Ver Mensaje
¿no has cambiado el nombre del campo, verdad?
porque sigo viendo logins.time en el reporte del error. Tienes que cambiar el nombre time a time2 en la base y en todos los lugares de la consulta donde escribías time debes escribir time2.
Me sigue dando el mismo error.
He cambiado todos los 'time' por time2'. En la estructura también.


Error en la consulta de conteo de registros: SELECT COUNT(*) FROM logins GROUP BY userid)t1 ON t1.USER = logins.userid AND t1.maximo = logins.time2. Mysql dijo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')t1 ON t1.USER = logins.userid AND t1.maximo = logins.time2' at line 1
  #20 (permalink)  
Antiguo 18/04/2009, 12:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

En que parte de la consulta haces un select count(*)??

Tu versión de mysql soporta subconsultas?

Que versión tienes? Puedes consultarla con
Código mysql:
Ver original 
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 18/04/2009 a las 13:19
  #21 (permalink)  
Antiguo 19/04/2009, 10:48
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Versión (localhost):
---

Versión (servidor):
---

Última edición por Chmlls; 20/04/2009 a las 03:08 Razón: Solucionado
  #22 (permalink)  
Antiguo 19/04/2009, 11:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

No deberías tener problemas.

No me contaste en que parte de la consulta llamas un select count(*).
Las pruebas las estas haciendo desde php o desde mysql directamente?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #23 (permalink)  
Antiguo 19/04/2009, 12:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con SELECT MAX

Amigo chmlls

Acabo de hacer una prueba creando las tablas, añadiendo datos y probando la consulta.
A mi me funciona perfecto.
Creo que estas haciendo mal las pruebas o algo raro, por que en sintaxis esta muy bien.
Yo tengo una versión inferior a la tuya, y no tuve ningún problema.
Asumo que tus pruebas, las haces desde php y es posible que tu consulta se ejecute con otros trozos de codigo que no tienen que ver y te genere error.
Pruebalo desde phpmyadmin y nos cuentas.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #24 (permalink)  
Antiguo 19/04/2009, 15:02
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Vaya, desde PMA si funciona. Nunca se me ocurrió hacer las consultas directamente en PMA para comprobar :S

Estoy usando paginator.inc.php para paginar los resultados, ahí debe estar el problema. Con las consultas de mostrar la lista 'clientes' si funciona con este paginador. El problema es con esta consulta en este paginador, supongo.


Gracias por tu interés en ayudarme.
  #25 (permalink)  
Antiguo 20/04/2009, 01:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con SELECT MAX

Yo también sospechaba algo, pero pensé que lo probabas en PHPMyAdmin. Haz siempre las pruebas en consola o en el SQL de PHPMyAdmin con datos absolutos para determinar si el problema es de la consulta o de la sintaxis PHP.
Pide ayuda en el foro PHP sobre cómo poder adaptar esto al paginador.
En cualquier caso y por lo que se refiere a la consulta un
SELECT COUNT(*) FROM (AQUI DENTRO LA CONSULTA)
podría decirte el total. El problema es que la consulta es introducida en una variable y de ahí saca la otra del count(*). Si quieres hacerlo, tendrás que adaptar la clase. Pregunta en el foro PHP.
  #26 (permalink)  
Antiguo 20/04/2009, 03:08
 
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problema con SELECT MAX

Las cosultas funcionan perfectamente. El problema está en el código PHP.



Muchas gracias por vuestra ayuda y atención,
saludos cordiales

Tema solucionado
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 09:49.