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

Ordenar registros sin ID

Estas en el tema de Ordenar registros sin ID en el foro de Mysql en Foros del Web. Tengo una tabla y no suelo usar ID en tablas que sé que otro campo como el nombre va a ser la llave y no ...
  #1 (permalink)  
Antiguo 11/05/2012, 10:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Ordenar registros sin ID

Tengo una tabla y no suelo usar ID en tablas que sé que otro campo como el nombre va a ser la llave y no se van a repetir ya que mysql los ordena internamente en su memoria, pero ahora viene el problema si los quiera ordenar de manera descente como lo hago.
No tengo campo id y el ORDER BY 'campo' DESC pide campo el cual no tengo no tengo, tampoco la fecha.


¿No hay otra manera que añadir el campo id o fecha a la tabla?
  #2 (permalink)  
Antiguo 11/05/2012, 10: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, 5 meses
Puntos: 2658
Respuesta: Ordenar registros sin ID

El orden sería sobre el o los campos que forman la clave primaria.
Quiero suponer que tienes declarada una PK, sea cual sea... ¿No es así?
__________________
¿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 11/05/2012, 10:58
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Sí pero si pongo el nombre que es la key me lo ordena alfabéticamente.
  #4 (permalink)  
Antiguo 11/05/2012, 11:00
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: Ordenar registros sin ID

Si lo ordena alfabéticamente, es porque el campo es CHAR o VARCHAR, o bien es que estás cometiendo algún error de conversión.
Postea la sentencia y estructura de tu tabla (el CREATE TABLE)., entonces veremos
__________________
¿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 11/05/2012, 11:09
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Es un varchar.

Lo he hecho así

$cuenta=($totalregistrostabla-5)
$sql7 = "SELECT * FROM tabla LIMIT $cuenta,5";

Me salen los últimos 5 registros que es lo que quiero pero en orden ascendente y los quiero descendente estoy en ello.
  #6 (permalink)  
Antiguo 11/05/2012, 11:23
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: Ordenar registros sin ID

Pues si es un VARCHAR, siempre te lo va a ordenar alfabéticamente. Por definición, un VARCHAR guarda cadenas de texto.
Si lo usas para guardar enteros, decimales, fechas, o booleanos, es irrelevante. Para el MySQL siguen siendo cadenas de texto.

Por otro lado, lo que te pedí era el CREATE TABLE, para poder entender qué forma tiene la PK. No lo posteaste.

Usa
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombredetutabla
y postea lo que resulta de eso.
__________________
¿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 11/05/2012, 11: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: 16 años, 5 meses
Puntos: 2658
Respuesta: Ordenar registros sin ID

Cita:
Iniciado por jordi45 Ver Mensaje
Es un varchar.

Lo he hecho así

$cuenta=($totalregistrostabla-5)
$sql7 = "SELECT * FROM tabla LIMIT $cuenta,5";

Me salen los últimos 5 registros que es lo que quiero pero en orden ascendente y los quiero descendente estoy en ello.
Es más simple hacer:
Código MySQL:
Ver original
  1. FROM (SELECT * FROM TABLA ODER BY claveprimaria DESC LIMIT) t1
  2. ORDER BY claveprimaria

Y que MySQL lo resuelva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/05/2012, 11:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Me da error

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C
  #9 (permalink)  
Antiguo 11/05/2012, 12:10
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: Ordenar registros sin ID

Pruébalo primero directamente por medio de una interfase de tipo PhpMyadmin o similar.

¿No estás usando ninguna?
__________________
¿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 11/05/2012, 12:12
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: Ordenar registros sin ID

Lección básica: Las sentencias jamás se prueban en el cuerpo de los scripts de PHP.
Se prueban primero manualmente con interfases adecuadas (Navicat, MySQL Workbech, PhpMyamin, etc).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 11/05/2012, 12:16
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Probado en Phpmyadmin
Cita:
#1064 - 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 ') tabla ORDER BY nombre
  #12 (permalink)  
Antiguo 11/05/2012, 12:22
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: Ordenar registros sin ID

¿La copiaste sin corregirla?
Tiene al menos dos errores de sintaxis la que te puse.

Postea lo que pusiste 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)
  #13 (permalink)  
Antiguo 11/05/2012, 12:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Le he corregido el ORDER y el t1 me supongo que es el nombre de la misma tabla y las ; al final pero vamos que no funciona ya que el campo nombre es un varchar, y nunca lo va a ordenar como un número, luego he intentado crear un array para cambiar el orden de los registros emulando un DESC y no lo he conseguido.


¿El id siempre hay que ponerlo en tablas que los registros son únicos? Porque ponerle el id me lleva unos minutos pero esto me está llevando horas.


Última edición por jordi45; 11/05/2012 a las 12:44
  #14 (permalink)  
Antiguo 11/05/2012, 12:50
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: Ordenar registros sin ID

¿Podrías hacerme el favor de enviarme el resultado de esto, poniéndole el nombre de la tabla que estás usando?
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombredetutabla

Y no. Parchar un diseño de bases de datos para arreglar un defecto que no existe, no es una buena idea.
El problema es que no estás haciendo lo que te pido, entonces no podemos analizar correctamente lo que tienes que hacer. No te pido esa info por que sí. Si no me la das, no puedo saber si realmente estamos haciendo lo correcto.
Yo, personalmente, soy totalmente contrario al uso de PK autoincrementales, porque traen más problemas en el tiempo, que las ventajas que aportan. Para mí son simples "parches" aplicados cuando no se conoce la forma correcta de diseñar una base.
__________________
¿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 11/05/2012, 15:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Cita:
CREATE TABLE `edificios` (
`nombre` varchar(255) NOT NULL,
`tipo` varchar(50) NOT NULL,
`fecha` int(5) NOT NULL,
`icono` varchar(255) NOT NULL,
`foto` varchar(255) NOT NULL,
`continente` varchar(20) NOT NULL,
`pais` varchar(40) NOT NULL,
`estado` varchar(30) NOT NULL,
`descripcion` text NOT NULL,
`video` text,
`contador` int(11) NOT NULL default '0',
`url` varchar(255) NOT NULL,
PRIMARY KEY (`nombre`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
  #16 (permalink)  
Antiguo 11/05/2012, 21: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, 5 meses
Puntos: 2658
Respuesta: Ordenar registros sin ID

Mira, en principio, no me parece que el nombre de un edificio sea una buena elección para una clave primaria, y menos aún si la tabla abarcar-a diferentes ciudades, provincias y hasta países.
¿Tienes idea de cuántos edificios pueden llamarse igual en esas circunstancias?
Solamente en Argentina (mi país) conozco en tres provincias 14 edificios llamados "El Palomar", un centenar o más aún que se llaman "Libertador San Martín" y ni hablemos de otros nombres más característicos de la historia.
Tienes que entender que una PK debe ser siempre única, e identificar unívocamente a un sólo registro en la tabla. Si el campo que vas a usar no tiene esa cualidad, tienes dos alternativas:
1) Usas más de un campo en la construcción de la PK, de modo que la combinación de como resultado una clave única.
2) Creas la clave en base a un sistema de numeración o un sistema de codificación propio (por ejemplo, combinando las letras usadas para designar a un país, mas el numero de DDN de la ciudad).
Cualquiera de las opciones que elijas, deberás mantenrla por siempre.

Además de esto, veo que estás usando tablas MyIAM.
¿Estás conciente de que ese tipo de tablas carece de integridad referencial? Es de cir, no se pueden definir FOREIGN KEY con ese tipo de tablas.
Son muy funcionales cuando hay alto nivel de escritura en tablas, pero sino, no aporta mayores ventajas.
Además, carecen de control de transacciones, por lo que manejar la concurrencia de usuarios escribiendo es un problema.

Finalmente, el ordenamiento en el caso que muestras será siempre alfabético, por lo que si quieres otros ordenamientos deberás indicar cuáles y en base a qué criterios.
Si los quieres por orden de ingreso, deberás ordenarlos por "fecha", si los deseas por pais y por ingreso, será "pais", "fecha"; etc.

Respecto al caso de muestra que te puse, lo que el faltaba era un poco de corrección de sintaxis:
Código MySQL:
Ver original
  1. FROM (SELECT * FROM edificiosORDER BY nombre DESC) t1
  2. ORDER BY nombre

Una nota final: Las fechas deben ser DATE, DATETIME o TIMESTAMP. No INT.
Un INTN para almacenar la fecha sólo sirve si vas a usar UNIX_TIMESTAMP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 12/05/2012, 02:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Ordenar registros sin ID

Estoy al otro lado del charco y ahora lo pruebo, lo del nombre son edificios famosos y son registros únicos porque no me interesa que se repitan si mira por ejemplo la wikipedia por ejemplo hay cientos de palacios reales pero si me refiero a uno en particular por ejemplo Palacio Real que hay varios) añado de Madrid para identificarlo no lo denomino como solo palacio real. Si se repite siempre se le puede añadir otro atributo al nombre. La wikipedia también hace lo mismo si quiere puede mirar este ejemplo

Fuerte de Agra

http://es.wikipedia.org/wiki/Fuerte_de_Agra

Fuerte rojo de Delhi

http://es.wikipedia.org/wiki/Fuerte_rojo_de_Delhi

Puede hacer lo mismo con el término Casa Blanca

Si me refiero a la de Washington solo la nombraré con ese término

http://es.wikipedia.org/wiki/Casa_Blanca

Si me refiero al edificio con el mismo nombre en moscú la llamaré Casa Blanca de Moscú

http://es.wikipedia.org/wiki/Casa_Blanca_de_Mosc%C3%BA

Los dos son fuertes rojos o casas blancas pero en el identificador nombre siempre los nombro de forma diferente quedando siempre el nombre como key única.

Sólo uso id cuando sé que los nombres se van a repetir, porque el mysql en su memoria interna ya les añade un número de orden.

Esto lo hago porque que edificios famosos hay unos pocos miles, si haría un catastro pues sí lo haría con otra key.

****

Ya he probado su select y nada los ordena alfabéticamente los 5 primeros registros.

A partir de ahora voy a incluir la fecha y los ordenaré por fecha de inserción, gracias por su tiempo y explicaciones.

Respecto al campo fecha no es una fecha es un año ya está cambiado el nombre, lo que pasa que le puse tipo year y no me cogía números negativos -200 para decir que es A.C. u otros números, el year está muy limitado.

Última edición por jordi45; 12/05/2012 a las 02:44
  #18 (permalink)  
Antiguo 13/05/2012, 15:12
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Ordenar registros sin ID

Hola jordi45,

Según lo que he estado leyendo digo yo que no bastaría con un:

Código SQL:
Ver original
  1. SELECT * FROM tabla ORDER BY nombre DESC LIMIT 5

Si eso es que no lo he entendido bien. Atendiendo al problemilla de varchar e int, a mysql le va a dar igual y te los mostrará ordenados. Pero no porque los trate como números si no porque los ordena en relación a la tabla ASCII, y creo que por suerte para muchos de nosotros la hicieron ordenada (jejeje). El problema viene cuando en esas celdas mezclas carácteres alfanuméricos. Pero bueno, eso es agua de otro manantial.

Y en relación a lo que comenta gnzsoloyo, tiene toda la razón. Ántes de crear una BD hay que estudiar a fondo todos los aspectos de la misma, para que luego dure años y años sin tener que variarla lo más mínimo. Porque yo me he encontrado auténticas chapuzas, que no se podían llamar de otra forma y que para actualizar aquello hacía falta dios y ayuda.

¡Un saludo!
  #19 (permalink)  
Antiguo 13/05/2012, 15: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: 16 años, 5 meses
Puntos: 2658
Respuesta: Ordenar registros sin ID

Cita:
Respecto al campo fecha no es una fecha es un año ya está cambiado el nombre, lo que pasa que le puse tipo year y no me cogía números negativos -200 para decir que es A.C. u otros números, el year está muy limitado.
Bueno, es que nadie pensó en que se tenían que hacer estadísticas para presentar presupuestos en el Senado Romano... O que Poncio Pilatos aún tenía que entregarle reportes administrativo-contables al emperador Tiberio...

En serio, es lógico que no te acepte una fecha anterior al siglo XV, entre otras cosas, porque tendrías problemas con los calendarios (ellos usaban el Juliano y nosotros el Gregoriano).
Hay ciertas restricciones imposibles de evitar, entre ellas que no puedes almacenar una fecha negativa, porque técnicamente no existen años negativos, y porque el tipo de datos se desbordaría.
La solución que le has encontrado es lo que se puede hacer.

En cuanto a la consulta en cuestión, es cierto que se estaba complicando un poco, pero
Código MySQL:
Ver original
  1. FROM edificios
  2. ORDER BY nombre DESC
debería devolverte los últimos 5 de la lista, obviamente ordenados alfabéticamente porque tu clave es alfabética. Para que te lo ordene de otra forma, como ya hemos hablado, tienes que indicar otro tipo de columna que te sirva para lo que quieres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: registros, sql, tabla, campos
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:33.