Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con ORDER BY DESC

Estas en el tema de Problema con ORDER BY DESC en el foro de PHP en Foros del Web. Bueno, tengo un simple problema y es que tengo un ranking que me muestra los mejores tres jugadores, se clasifican mediante la media de ataque ...
  #1 (permalink)  
Antiguo 28/07/2013, 09:05
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Problema con ORDER BY DESC

Bueno, tengo un simple problema y es que tengo un ranking que me muestra los mejores tres jugadores, se clasifican mediante la media de ataque y defensa de cada uno de ellos, todo funciona bien pero cuando la media alcanza los dos dígitos, después, solo coge el primero por lo que si es 10 la media, cogería 1...
El código es un simple:

Código SQL:
Ver original
  1. "SELECT * FROM personajes ORDER BY media DESC LIMIT 3"

Después tan solo un While hace que aparezcan... ¿Me pueden ayudar? Muchas gracias!
  #2 (permalink)  
Antiguo 28/07/2013, 10:06
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Problema con ORDER BY DESC

Como esta el esquema de la BD pareciera que el campo media solo acepta 1 digito osea tiene 1 en el campo Length !!!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #3 (permalink)  
Antiguo 28/07/2013, 16:19
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

Queba! Si sé que tengo dos dígitos porque lo veo en la BD.
  #4 (permalink)  
Antiguo 28/07/2013, 17: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: 17 años
Puntos: 2658
Respuesta: Problema con ORDER BY DESC

Cita:
Iniciado por iEnrique Ver Mensaje
Queba! Si sé que tengo dos dígitos porque lo veo en la BD.
Pues muestra la estructura de la tabla, para estar seguros:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE personajes
Eso devolverá la sentencia que crea la tabla, con lo que podremos saber si ese campo está exactamente como se supone que debería.
Para que te quede claro: Que nos digas que está bien no alcanza. Necesitamos verlo, porque a veces hay detalles que el que se inicia no conoce y resulta difícil de explicar, como la diferencia entre usar FLOAT y usar DECIMAL en la tabla. No es lo mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/07/2013, 15:04
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

¿Esto?

Código SQL:
Ver original
  1. CREATE TABLE `personajes` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` VARCHAR(30) NOT NULL,
  4.  `personaje` VARCHAR(50) NOT NULL,
  5.  `personaje_mini` VARCHAR(30) NOT NULL,
  6.  `defensa` VARCHAR(50) NOT NULL,
  7.  `ataque` VARCHAR(50) NOT NULL,
  8.  `descripcion` text NOT NULL,
  9.  `media` VARCHAR(50) NOT NULL,
  10.  `puntos` VARCHAR(50) NOT NULL,
  11.  `user` VARCHAR(100) NOT NULL,
  12.  PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
  #6 (permalink)  
Antiguo 29/07/2013, 16:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con ORDER BY DESC

Exacto.

Ahora bien, ¿te has fijado que no tienes ningún campo numérico fuera del ID?
Incluso el "media" es un VARCHAR, es decir, es una cadena de caracteres, con lo que el ORDER BY ordenará el contenido alfabéticamente, y no por su valor numérico.
Por su puesto, eso sin contar conque los cálculos aritméticos pueden dar resultados inciertos, dependiendo de la forma que hayas almacenado esos números...
La verdad es que esa tabla está mal definida, y los datos contenidos en esos campos pueden darte resultados incorrectos con mucha, mucha facilidad...
¿Podrías postear un conjunto de registros de ejemplo?
Como para ver lo que puede estar generándose con ese tipo de campos.
__________________
¿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 29/07/2013, 17:43
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Problema con ORDER BY DESC

Cita:
Iniciado por iEnrique Ver Mensaje
¿Esto?

Código SQL:
Ver original
  1. CREATE TABLE `personajes` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` VARCHAR(30) NOT NULL,
  4.  `personaje` VARCHAR(50) NOT NULL,
  5.  `personaje_mini` VARCHAR(30) NOT NULL,
  6.  `defensa` VARCHAR(50) NOT NULL,
  7.  `ataque` VARCHAR(50) NOT NULL,
  8.  `descripcion` text NOT NULL,
  9.  `media` VARCHAR(50) NOT NULL,
  10.  `puntos` VARCHAR(50) NOT NULL,
  11.  `user` VARCHAR(100) NOT NULL,
  12.  PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
Defensa, ataque, media, puntos deberian ser sumericos no textos !!!!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #8 (permalink)  
Antiguo 30/07/2013, 02:02
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

Ahora lo tengo así:

Código SQL:
Ver original
  1. CREATE TABLE `personajes` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` VARCHAR(30) NOT NULL,
  4.  `personaje` VARCHAR(50) NOT NULL,
  5.  `personaje_mini` VARCHAR(30) NOT NULL,
  6.  `defensa` DECIMAL(50,0) NOT NULL,
  7.  `ataque` INT(50) NOT NULL,
  8.  `descripcion` text NOT NULL,
  9.  `media` DECIMAL(50,0) NOT NULL,
  10.  `puntos` INT(50) NOT NULL,
  11.  `user` INT(100) NOT NULL,
  12.  PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

Todos están INT (todos los que lo necesitan) menos "media" que lo tengo en DECIMAL que supongo que será cuando tiene decimales (0.233) que a veces puede ocurrir con la media ya que por ejemplo ($ataque = 10) ($defensa = 7) ($ataque + $defensa / 2 = 8.5)... decimal. ¿Es así?
  #9 (permalink)  
Antiguo 30/07/2013, 04: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: 17 años
Puntos: 2658
Respuesta: Problema con ORDER BY DESC

No, ese decimal está mal definido.
Un DECIMAL, en MySQL, se define como (longitud, decimales), por lo que a los efectos del caso, estás indicando que lo almacene con cero decimales, es decir, como un entero.
En tu caso, si quieres que ese campo tenga 2 decimales y 5 enteros, deberá ser DECIMAL(8,2).
¿Por qué 8 y no 7, si 5+2 = 7?
Porque MySQL reserva un espacio para la posición del punto decimal.
Este tipo de cosas es mejor que las trates en el foro de Bases de Datos, porque exceden el tema de PHP. Son OFF TOPIC acá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 30/07/2013, 04:47
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

Vale, ultima vez que pongo un mensaje sobre esto, ¿lo tengo bien así?

Código SQL:
Ver original
  1. CREATE TABLE `personajes` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` VARCHAR(30) NOT NULL,
  4.  `personaje` VARCHAR(50) NOT NULL,
  5.  `personaje_mini` VARCHAR(30) NOT NULL,
  6.  `defensa` INT(50) NOT NULL,
  7.  `ataque` INT(50) NOT NULL,
  8.  `descripcion` text NOT NULL,
  9.  `media` DECIMAL(51,9) NOT NULL,
  10.  `puntos` INT(50) NOT NULL,
  11.  `user` INT(100) NOT NULL,
  12.  PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

Lo que quiero es que media tenga 50 enteros y 9 decimales. ¿Bien?
  #11 (permalink)  
Antiguo 30/07/2013, 06:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con ORDER BY DESC

Cita:
50 enteros y 9 decimales.
¿Estás seguro de lo que estás diciendo?
Por lo pronto, está mal. Para representar cifras de semejante tamaño se usa representación científica y son números por aproximación, no números de precisión´. Además el DECIMAL no puede representar cifras de semejante magnitud.
Al menos deberías consultar el manual de referencia antes de intentarlo, y el de ambas cosas (PHP y MYSQL), porque ni el PHP puede manejar números así, ni hablar de MySQL.

Por otro lado, ¿me puedes explicar en qué contexto de juego puedes necesitar un número como 99.999.999.999.999.999.999.999.999.999.999.999.999 .999,999999999, es decir, de 99 mil sextillones?

Eso no tiene ningún sentido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 30/07/2013, 12:52
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

Y 51 enteros y 2 decimales?
Quizá 51 es demasiado...
  #13 (permalink)  
Antiguo 30/07/2013, 21:09
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Problema con ORDER BY DESC

Cita:
Iniciado por iEnrique Ver Mensaje
Y 51 enteros y 2 decimales?
Quizá 51 es demasiado...
DURRRRRRRRRRRRRRRR (¬_¬) Creo que ni facebook tiene esa cantidad de usuarios !!
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #14 (permalink)  
Antiguo 31/07/2013, 03:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con ORDER BY DESC

Cita:
Iniciado por iEnrique Ver Mensaje
Y 51 enteros y 2 decimales?
Quizá 51 es demasiado...
Creo que no estás comprendiendo: Es numero ni tiene sentido, ni es posible de manejar en ningún sistema informático porque excede la capacidad de representación de cualquier lenguaje o base de datos... salvo que tengas alguna basada en chips de 256 bits...

Deja de darle vueltas al rulo, y defínelo como DECIMAL(12,2) y tendrás de sobra. No creo que alguien acumule más de 1.000 millones de puntos. ¿Y tu?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 31/07/2013, 05:37
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: Problema con ORDER BY DESC

Muchísimas gracias, ya te comprendo. ¡Dejo como solucionado, gracias!

Etiquetas: desc, order, select
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 11:14.