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

Problema con max(id)

Estas en el tema de Problema con max(id) en el foro de Mysql en Foros del Web. Hola buenas, estoy haciendo un listado de programas y tengo problemas con el max(id). Tengo dos plantillas para mostrar los programas. Una es completa, con ...
  #1 (permalink)  
Antiguo 15/06/2010, 02:53
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 3
Exclamación Problema con max(id)

Hola buenas, estoy haciendo un listado de programas y tengo problemas con el max(id).

Tengo dos plantillas para mostrar los programas. Una es completa, con nombre, descripcion, link de descarga de la pagina del autor y etc. La otra es mini, osease que solo tiene nombre, un trozo de la descripcion y el tipico leer mas.

El caso es que lo que trato de hacer es que al entrar en la pagina inicial se muestre el ultimo programa agregado en la plantilla completa y debajo salga un listado del resto de programas pero en la plantilla mini.

Para esto estoy intentando hacer uso de max(id) pero esque no me devuelve lo que quiero que me devuelva. Tengo tres programas agregados de prueba en la base de datos que son estos:

id_programas=15, nombre_programas=photoshop
id_programas=16, nombre_programas=laurencio
id_programas=12, nombre_programas=firefox

He intentado rescatar el valor del id mas grande que en este caso seria el del programa "laurencio" ejecutando esta query:

$query_ultimo_agregado="SELECT MAX(id_programas) FROM programas";

Con esa consulta no se supone que obtendria el valor del campo id_programas mas alto? El caso es que si esto es asi, haciendo un echo de $result=mysql_query($query_ultimo_agregado); se imprimiria en pantalla el numero 16, pero se imprime el 7 siempre por muchos programas que agregue.

La verdad es que es ese numerito el que me esta impidiendo continuar :P

Otra manera que se me paso por la cabeza es esta consulta:

$query_ultimo_agregado="SELECT * FROM programas WHERE id_programas = MAX(id_programas)";

Esta consulta no deberia obtener todos los campos de la fila donde haya un campo id_programas que sea mas alto que el resto??

En fin estoy bloqueado

Saludos.
  #2 (permalink)  
Antiguo 15/06/2010, 03:11
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Problema con max(id)

Bueno e resuleto el bloqueo usando ORDER BY campo DESC. De todas formas si alguien puede explicarme que hago mal con max() se lo agradeceria.

Saludos y gracias.
  #3 (permalink)  
Antiguo 15/06/2010, 07:05
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 max(id)

Me atrevería a decir que el campo id_programas es de tipo texto y no numerico. Por esta razón toma el 7 como un numero mayor que el 16 (Alfabéticamente hablando).

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 15/06/2010, 07:19
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Problema con max(id)

Para definir el tipo numerico a la hora de crear un campo eliges el tipo "int" no?

Porque si no es asi ahi si que la he cagado xDD. Soy muy newbie todavia.
  #5 (permalink)  
Antiguo 15/06/2010, 07:34
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 max(id)

Pero si lo tenias como varchar?
si es así, puedes corregir el error haciendo un alter table.

Código SQL:
Ver original
  1. ALTER TABLE tu_tabla MODIFY campo INTEGER;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 15/06/2010, 07:48
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, 4 meses
Puntos: 2658
Respuesta: Problema con max(id)

Nota: cuando se trata de identificadores es preferible indicar UNSIGNED, ya que de lo contrario se pierde la mitad del rango de representación del número, puesto que esa mitad queda asignada a números negativos, que un ID jamás usará (¿te imaginas un documento de identidad que sea de número negativo?)
La mayoría de las veces eso no se notará porque el rango es amplio, un INT anda por los 2.000.000.000, pero cuando usas tipos de dato menores el impacto es inmediato: Un TINYINT será de 0 a 255, contra -128 a +127...

Código MySQL:
Ver original
  1. ALTER TABLE tu_tabla MODIFY campo INT UNSIGNED;
__________________
¿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 15/06/2010, 08:30
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Problema con max(id)

Yo los campos los he creado desde el phpmyadmin y el campo en cuestion es de tipo int.

Si desde el phmyadmin a la hora de crear un campo tambien te da la opcion de crearlo como UNSIGNED esta bien pero aun asi si el rango es tan grande no es problema para mostrarme el numero que le estoy pidiendo, quiero decir:

El campo es int (numerico) y usando max(id_programas) quiero conseguir el valor de ese campo pero cuando lo intento me tira siempre un 7. He agregado mas programas a la base de datos pero esque me devuelve 7 independientemente de la cantidad de programas que haya.

Si hay 3 y uso max() me tira 7 y si agrego un cuarto programa max() me sigue tirando un 7.

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  #8 (permalink)  
Antiguo 15/06/2010, 08:49
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, 4 meses
Puntos: 2658
Respuesta: Problema con max(id)

Algunos detalles

- Esta consulta no debería funcionar, porque una función agregada no puede usarse en el WHERE:
Código MySQL:
Ver original
  1. FROM programas
  2. WHERE id_programas = MAX(id_programas);
en todo caso puede funcionar así:
Código MySQL:
Ver original
  1. FROM programas
  2. HAVING id_programas = MAX(id_programas);

- ¿Podrías postear la sentencia CREATE TABLE que crea la tabla en cuestión? Tal vez haya algo que no estamos viendo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 16/06/2010, 18:41
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Problema con max(id)

Bueno, perdon por tardar en contestar pero esque estoy un poco liado :P

El caso es que la tabla la creo desde el phpmyadmin a golpe de clic. He exportado la base de datos para encontrar la sentencia create y es esta:

Código:
CREATE TABLE IF NOT EXISTS `programas` (
  `id_programas` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `tamano_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `idioma_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `categoria_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `subcategoria_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `autor_programas` varchar(255) COLLATE latin1_spanish_ci NOT NULL, 
`link_ofi_programas` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  `imagen_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `video_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `descripcion_programas` varchar(100) COLLATE latin1_spanish_ci NOT NULL,
  `visitas_programas` int(255) NOT NULL,
  `descargas_programas` int(255) NOT NULL,
  `votos_programas` int(255) NOT NULL,
  `votost_programas` int(255) NOT NULL,
  `fecha_programas` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
  `estado_programas` varchar(11) COLLATE latin1_spanish_ci NOT NULL,
  PRIMARY KEY (`id_programas`),
  UNIQUE KEY `nombre_programas` (`nombre_programas`,`link_ofi_programas`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=43 ;
Repito que ya resolvi el problema usando ORDER BY pero aun asi me pica la curiosidad de saber por que me funciona el max() :P

Saludos a todos!


Editado:
Acabo de probar usando HAVING en vez de WHERE y me ha devuelto el id mas grande :)

Aun asi, si alguien puede darme alguna opinion sobre los campos que he creado y como los he creado... Esta es mi primera pagina web con php y bases de datos. La estoy haciendo un poco deprisa y corriendo pero bueno yo creo que me esta quedando bien. Si alguien quiere opinar algo sobre la tabla que he creado estoy abierto a cualquier critica.

Última edición por higochumbo; 16/06/2010 a las 18:48

Etiquetas: Ninguno
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 04:59.