Foros del Web » Programando para Internet » PHP »

Problema al querer ordenar por id

Estas en el tema de Problema al querer ordenar por id en el foro de PHP en Foros del Web. Hola tengo el siguiente codigo en php: function getData($id) { if (!$this->db) return(false); // Find item's data $result = @mysql_query("SELECT * FROM ".$this->dbtable." WHERE id='".mysql_real_escape_string($id)."' ...
  #1 (permalink)  
Antiguo 13/07/2009, 18:26
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Problema al querer ordenar por id

Hola tengo el siguiente codigo en php:

function getData($id) {

if (!$this->db) return(false);

// Find item's data
$result = @mysql_query("SELECT * FROM ".$this->dbtable." WHERE id='".mysql_real_escape_string($id)."' ORDER BY id DESC", $this->db);
if (!$result) return(false);


// Item not found, return 0,0
if (mysql_num_rows($result) < 1) return($this->prepareOutput(0,0));

// Item found, return item's data
$item = mysql_fetch_assoc($result);
return($this->prepareOutput($item['votos'], $item['votosSum']));

}

pero el ORDEN BY, no hace nada, alguie podria ayudarme a ver que puede ser, gracias.
  #2 (permalink)  
Antiguo 13/07/2009, 19:06
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 al querer ordenar por id

Concentremonos aca
SELECT * FROM ".$this->dbtable." WHERE id='".mysql_real_escape_string($id)."' ORDER BY id DESC

Pruebala desde mysql directamente y dinos por que no funciona. En sintaxis la veo bien.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/07/2009, 20:34
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Hola, gracias por la ayuda, a que te referis con probarla directamente dese mysql?
  #4 (permalink)  
Antiguo 13/07/2009, 20:37
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 al querer ordenar por id

Me imagino que $this->dbtable tendrá el nombre de la tabla. y mysql_real_escape_string($id) el parametro a buscar.

desde phpmyadmin o desde la consola de mysql o desde el gestor grafico para mysql que utilices, ejecuta el select.
Código sql:
Ver original
  1. SELECT *FROM tabla WHERE id='valor' ORDER BY id DESC;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 14/07/2009, 14:30
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

el codigo mas completo es asi:


function getData($id) {

if (!$this->db) return(false);

// Find item's data
$result = @mysql_query("SELECT * FROM ".$this->dbtable." WHERE id='".mysql_real_escape_string($id)."' order by id DESC", $this->db);
if (!$result) return(false);

// Item not found, return 0,0
if (mysql_num_rows($result) < 1) return($this->prepareOutput(0,0));

// Item found, return item's data
$item = mysql_fetch_assoc($result);
return($this->prepareOutput($item['votes'], $item['votesSum']));

}

function saveRate($id, $score) {

if (!$this->db) return(false);

// Insert or update item's data
$result = @mysql_query("INSERT INTO ".$this->dbtable." SET id='".mysql_real_escape_string($id)."', votes=1, votesSum=".$score." ON DUPLICATE KEY UPDATE votes=votes+1, votesSum=votesSum+".$score, $this->db);
if (!$result) return(false);

return('ok');

}


lo que veo es que para insertar los datos hay un SET, no se si es por eso que luego no sabe como ordenarlos, sera por eso? para probarlo desde SQL no se que valor ponerle al id porque este tiene un mysql_real_escape_string
  #6 (permalink)  
Antiguo 14/07/2009, 14:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problema al querer ordenar por id

Por favor, evitar poner código de programación en el foro de bases de datos.
Véase: http://www.forosdelweb.com/f21/funci...-datos-413499/
Gracias.

Translado el tema al foro de PHP.

En cuanto a tu pregunta. Imprime la consulta con echo y usa mysql_error() para saber cuál es el error que produce la consulta.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 14/07/2009, 14:44
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

No te funciona y te bota error ó No te ordena como quieres?
  #8 (permalink)  
Antiguo 14/07/2009, 14:50
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

no me ordena, lo que pasa que el id es un string, el campo no es INT es un varchar,
no estoy seguro si tengo que convertirlo a valor numerico, lei por ahi algo de :

ORDER BY CONVERT(id, signed) DESC

lo probe pero no se si me falta algo mas, gracias y perdon por poner el codigo.
  #9 (permalink)  
Antiguo 14/07/2009, 14:59
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Si, puedes utilizar el convert, es la mejor idea, dado que el campo no es del tipo que debe ser.
  #10 (permalink)  
Antiguo 14/07/2009, 17:34
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

probe con eso pero nada, ya no se con que probar, no logro poder ordenarlo
  #11 (permalink)  
Antiguo 15/07/2009, 08:27
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Prueba asi:

Código PHP:
order by CAST(id AS SIGNEDDESC 
Saludos!!
  #12 (permalink)  
Antiguo 15/07/2009, 08:44
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 al querer ordenar por id

utiliza la función cast.

order by cast(id as unsigned) desc;

Una pregunta... el campo id tiene caracteres? o es de tipo varchar, pero guarda solo números?
Si guarda caracteres, no podrás convertirlo a entero.

EDITO: Te adelantaste rusinho
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 15/07/2009, 10:48
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Hola gracias por la ayuda, probe de las dos maneras, pero sigue sin ordenarlos, el campo id es de tipo varchar, y guarda solo numeros.
  #14 (permalink)  
Antiguo 15/07/2009, 10:56
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Umm has la siguiente prueba, SELECT cast(id as signed) FROM tutabla

Esto para ver que te arroja.

Otra cosa, te da un error, o simplemente no lo hace, prueba tambien con order by CAST(TRIM(id) AS SIGNED) DESC

Son opciones.

Saludos!!
  #15 (permalink)  
Antiguo 15/07/2009, 11:06
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 al querer ordenar por id

Definitivamente debes estar haciendo algo mal. Independiente que sea varchar, el ordena correctamente registros numéricos.

Código sql:
Ver original
  1. mysql> CREATE TABLE orden_id(id VARCHAR(2),nombre text);
  2. Query OK, 0 ROWS affected (0.05 sec)
  3.  
  4. mysql> INSERT INTO orden_id VALUES('1','nombre1');
  5. Query OK, 1 ROW affected (0.00 sec)
  6.  
  7. mysql> INSERT INTO orden_id VALUES('4','nombre4');
  8. Query OK, 1 ROW affected (0.00 sec)
  9.  
  10. mysql> INSERT INTO orden_id VALUES('2','nombre2');
  11. Query OK, 1 ROW affected (0.01 sec)
  12.  
  13. mysql> INSERT INTO orden_id VALUES('3','nombre3');
  14. Query OK, 1 ROW affected (0.00 sec)
  15.  
  16. mysql> SELECT *FROM orden_id;
  17. +------+---------+
  18. | id   | nombre  |
  19. +------+---------+
  20. | 1    | nombre1 |
  21. | 4    | nombre4 |
  22. | 2    | nombre2 |
  23. | 3    | nombre3 |
  24. +------+---------+
  25. 4 ROWS IN SET (0.00 sec)
  26.  
  27. mysql> SELECT *FROM orden_id ORDER BY id;
  28. +------+---------+
  29. | id   | nombre  |
  30. +------+---------+
  31. | 1    | nombre1 |
  32. | 2    | nombre2 |
  33. | 3    | nombre3 |
  34. | 4    | nombre4 |
  35. +------+---------+
  36. 4 ROWS IN SET (0.00 sec)
  37.  
  38. mysql> SELECT *FROM orden_id ORDER BY CAST(id AS UNSIGNED);
  39. +------+---------+
  40. | id   | nombre  |
  41. +------+---------+
  42. | 1    | nombre1 |
  43. | 2    | nombre2 |
  44. | 3    | nombre3 |
  45. | 4    | nombre4 |
  46. +------+---------+
  47. 4 ROWS IN SET (0.00 sec)
  48.  
  49. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #16 (permalink)  
Antiguo 15/07/2009, 12:29
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Hola, probe poner SELECT cast(id as signed) FROM tutabla y me muestra los numeros de los diferentes id, pero como dice huesos, el problema debe venir de como esta echa la aplicacion. no creo que pueda encontrarle solucion, gracias igual
  #17 (permalink)  
Antiguo 15/07/2009, 12:31
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Ademas les comento que probe ordenarlos por otro campo, que ese si es INT y son numeros y tampoco los ordena, el problema debe estar en como esta echo el sistema
  #18 (permalink)  
Antiguo 15/07/2009, 12:37
 
Fecha de Ingreso: junio-2004
Mensajes: 66
Antigüedad: 19 años, 10 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

Tambien algo que me llamo la atencion es que cuando quiero borrar una fila antes de borrarla en la parte de arriba sale esto:

DELETE FROM `ratethis` WHERE CONVERT(`id` USING utf8) = '15' LIMIT 1;

me llamo la atencion lo del Utf8, ya que cuando borro filas de otras tablas solo pone:

DELETE FROM `fotos` WHERE `id` = 15 LIMIT 1;

no se si eso les da alguna pista de lo que puede ser, si es algo del UTF8
  #19 (permalink)  
Antiguo 15/07/2009, 13:20
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Problema al querer ordenar por id

CONVERT(`id` USING utf8) solo lo coloca PHPMyAdmin
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:21.