2012-03-06 24 views
11

¿Cómo puedo seleccionar las filas en orden inverso (DB MySQL)?¿Cómo puedo seleccionar las filas en orden inverso (mysql)

For example, 
I have a table with 12 rows (fields: id,location), I want select -4th row before a row with id = 6, 
i.e. wanted row will have id = 'not necessarily 2', 
    but there is condition - where table.location='some_location'. 

¿Cómo debe ser el contenido de la solicitud de mysql?




Editted a 30 minut más tarde.
¡Aquí está la solución! Algunos ejemplo, he comprobado la sugerencia de drodil manera:

mysql> select * from subscrs where id < 100000 order by id desc limit 4; 
+-------+--------+-----------+-------+ 
| uid | subscr | event  | id | 
+-------+--------+-----------+-------+ 
| 5307 | 5123 | feed_news | 99999 | 
| 25985 | 5211 | feed_news | 99998 | 
| 15123 | 130 | feed_news | 99997 | 
| 28368 | 19497 | feed_news | 99996 | 
+-------+--------+-----------+-------+ 
4 rows in set (0.00 sec) 

Drodil, gracias!

+3

No estoy seguro de lo que está tratando de lograr seleccionando una fila con una ID 4 debajo de la ID que se suministró. Proporcione más detalles porque creo que es probable que haya una solución más adecuada para su problema. – aaroncatlin

+1

¿Puede aclarar su pregunta, quizás incluyendo algunos datos de muestra y cómo desea que se ordene? Por el momento, no entiendo lo que quieres hacer. –

+1

¿Qué sucede si su identificación se incrementa automáticamente y alguien ha eliminado la identificación de fila 2 en su caso, qué debería hacer entonces? ¿Qué sucede si el ID proporcionado es 2, de modo que cuatro filas anteriores tendrían ID -1 (no existente)? –

Respuesta

20

O bien, podría hacerlo sin importar los resultados eliminados, acaba de obtener el cuarto antes de que el identificador dado (6) por:

SELECT * FROM SomeTable WHERE id < 6 ORDER BY id DESC LIMIT 4,1 
2

La 4ª fila antes de una fila determinada, o la 4ª ID antes de una identificación determinada? Puede haber identificaciones faltantes debido a los registros eliminados (es decir, identificaciones 101, 102, 104, 105, 111, ...) ... si solo desea una ID 4 menor que otra ID por el motivo que sea (estoy de acuerdo) más información se debe dar aquí, ya que es probable que haya una solución mejor!), entonces puede simplemente hacer

SELECT * FROM SomeTable WHERE ID=6-4 

pueden ampliar en que si desea que el ID 4 menos que el ID de la fila que contiene una ubicación específica con

SELECT * FROM SomeTable WHERE ID = (SELECT ID FROM SomeTable WHERE Location='Germany')-4 

Pero, de nuevo, por favor compartir algunos datos de ejemplo y lo que estamos tratando de lograr/por qué usted está pensando en hacerlo de esta manera - esto no es una solución lógica. Si la ID 2 se eliminó, o si su campo de Ubicación no contiene datos únicos, se romperá. Debe haber un mejor diseño para lo que intenta hacer, pero necesita proporcionar más detalles para eso.

+0

Publiqué una respuesta similar al principio, pero luego la eliminé nuevamente porque esto se rompería en varios casos. Ver mi comentario a la pregunta. –

+0

Sí, estoy de acuerdo - el usuario tiene que tener un control estricto sobre la base de datos para que esto funcione, e incluso entonces es una manera completamente terribles de hacer/abordar las cosas. Pero hasta donde puedo entender la pregunta con lo que se proporciona, parece ser lo que está pidiendo. – maxx233

+0

lo siento, ¡no lo he explicado del todo! ¡Vea la pregunta editada arriba! –

1

si mi lectura de mentes todavía está trabajando, es probable que tenga algo como esto:

select t1.location, t2.location 
from mytable t1 
join mytable t2 on t2.id = t1.id - 4 
where t1.location = 'some_location' 
1

Agregue ORDER BY id DESC en la última consulta para buscar los datos del último al primero.

O

Por fin simplemente puede añadir ORDER BY id ASC asentimiento.

Cuestiones relacionadas