Foros del Web » Programando para Internet » PHP »

Cómo buscar el registro más próximo al que yo seleccioné?

Estas en el tema de Cómo buscar el registro más próximo al que yo seleccioné? en el foro de PHP en Foros del Web. Hola, tengo que posicionar unos registros. El campo de la base de datos es numerico pero no es el ID. Suponiendo, tengo 3 registros: 1 ...
  #1 (permalink)  
Antiguo 29/05/2014, 06:17
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Cómo buscar el registro más próximo al que yo seleccioné?

Hola,

tengo que posicionar unos registros. El campo de la base de datos es numerico pero no es el ID.

Suponiendo, tengo 3 registros:

1 - Pepe
2 - José
3 - Luis

Ahora quiero "subir" de posicion a José, entonces quedaria:

1 - José
2 - Pepe

3 - Luis

Hasta ahi todo bien. Lo venia haciando sumando o restando posiciones (+1/-1) y funciona bien.
El problema que se me presenta es si se borra un registro y queda "salteado", por ejemplo:

1 - Pepe
2 - José
5 - Luis

Entonces, si yo quiero "subir" Luis a la posicion de Jose, voy a tener que hacer tres veces click en "subir".

Lo que se me ocurrio, en vez de estar sumando y restando, es buscar el registro mas proximo al que yo seleccione, no importa el numero de posicion.

Por ejemplo, tengo los registros ubicados de la siguiente manera:

1 - Pepe
3 - José
10 - Luis
25 - Laura

Entonces, yo selecciono a José y quiero "bajarlo" a la posicion de Luis. José tiene posicion 3, como puedo saber la posicion de Luis? e invertirlas?, de manera que me quede:

1 - Pepe
3 - Luis
10 - José

25 - Laura


La consulta es: como puedo buscar el registro mas proximo, ya sea menor o mayor al que yo seleccione?

Gracias
  #2 (permalink)  
Antiguo 29/05/2014, 10:22
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 17 años, 11 meses
Puntos: 50
Respuesta: Cómo buscar el registro más próximo al que yo seleccioné?

para obtener digamos el mas próximo al 3 "en este caso el 10" seria una consulta como esta:

Código:
select max(numero) from tabla where numero > 3
Con la consulta anterior traería el 10.


Ahora is lo que quiere hacer es ordenar los registros de una tabla yo lo haría de esta manera:


Crear un campo llamado orden en la tabla

id, nombre, orden
1,dato1,1
2,dato2,5
3,dato3,3
4,dato4,2
5,dato5,4

el orden de los datos dependeria del numero en la columna orden..
Ahora si por ejemplo quiere dejar dato 5 que ya no este en la posicion 4 sino en la posicion 2... lo que hace es

1. establecer el orden en que quedarían todos los registros
2. dejar en cero el campo orden de todos los registros
3. empezar a asignar el valor orden de cada registro "cual es el 1, cual el 2 etc".

saludos,
  #3 (permalink)  
Antiguo 29/05/2014, 12:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Cómo buscar el registro más próximo al que yo seleccioné?

Debes buscar el MIN() entre dos consultas "separadas":

SELECT orden as uno WHERE orden>=x LIMIT 1
SELECT orden as dos WHERE orden<x LIMIT 1

Serian dos subconsultas unidas en una tercera ... pero no se bien como escribir el SQL .. pero seria algo como:

Código SQL:
Ver original
  1. SELECT MIN(uno,dos) IN (SELECT orden AS uno WHERE orden>=x LIMIT 1) AND IN (SELECT orden AS dos WHERE orden<x LIMIT 1);
__________________
Salu2!
  #4 (permalink)  
Antiguo 30/05/2014, 04:49
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Cómo buscar el registro más próximo al que yo seleccioné?

Muchas gracias por sus respuestas.
Utilice MIN y MAX y el campo 'order' de la tabla lo reacomodo, no dejo numeros salteados. Es lo q me pidieron.
Gracias

Etiquetas: registro
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 20:19.