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

order by - fijar un registro como primero y luego el resto

Estas en el tema de order by - fijar un registro como primero y luego el resto en el foro de Mysql en Foros del Web. no me manejo mucho en foros, asi qe si el tema esta en lugar equivocado o puede ser movido, por favor administrador sientase en la ...
  #1 (permalink)  
Antiguo 17/12/2010, 12:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
order by - fijar un registro como primero y luego el resto

no me manejo mucho en foros,
asi qe si el tema esta en lugar equivocado o puede ser movido, por favor administrador sientase en la libertad de actuar como estime necesario.

mi problema es bien puntual, quiero ordenar los resultados de una consulta en mysql para poder definir qe registro se vera primero...

por ejemplo tengo un pool con 100 fotos,
quiero qe al hacer click en la foto 25, por ejemplo, en una segunda pagina me muestre primero la foto 25 y luego las otras 10 ultimas fotos por su id DESC
(ovbiamente desde la pagina priemra paso la variable id qe quiero sea la primera foto, en este caso la 25)

he buscado y mirado y probado con order by case y otras alternativas, pero no he dado con nada.
ahora lo tengo medio trucho armado pasandole la foto e insertandola a la fuera como la primera foto, pero me gustaria poder resolvelo de alguna manera elegante dentro de la consulta.
agradeceria si a alguien se le ocurre alguna manera de solucionar esto
  #2 (permalink)  
Antiguo 17/12/2010, 14:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 13 años, 3 meses
Puntos: 447
Respuesta: order by - fijar un registro como primero y luego el resto

Buenas tardes ignacioquintana, según lo que entendí en tu post,

tu tabla es más o menos así:

Código:
id|descripcion
-------------------
1|uno
2|dos
3|tres
...
99|noventa y nueve
100|cien
Si se selecciona la foto con id 25 el resultado debería ser el siguiente:

Código:
id
--------
25|veinticinco
100|cien
99|noventa y nueve
...
77|setenta y siete
76|setenta y ocho
Si estoy en lo correcto esto puedes hacerlo así:

Código MySQL:
Ver original
  1. select T3.id, T3.descripcion from
  2. (
  3. select 1 as posicion, T1.id, T1.descripcion from TuTabla T1
  4. where id = 25
  5. select 2 as posicion, T2.id, T2.descripcion from TuTabla T2
  6. where id != 25 order by id desc
  7. ) T3
  8. order by posicion, id desc limit 26

Dale un vistazo a ver si es lo que necesitas, y si continuas con problemas lo comentas en el foro para tratar de ayudarte.

Saludos
Leo.
  #3 (permalink)  
Antiguo 17/12/2010, 18:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 15 años
Puntos: 836
Respuesta: order by - fijar un registro como primero y luego el resto

Otra forma de hacerlo partiendo de la tabla de ejemplo publicada por leonardo_josue:
Código MySQL:
Ver original
  1. SELECT id, description, IF(id = 25, 1, 2) AS orden
  2. FROM Tabla
  3. ORDER BY orden, id DESC
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 18/12/2010, 09:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: order by - fijar un registro como primero y luego el resto

gracias por todo,
gracias leonardo por explicar mejor mi inquietud, jeje
voy a tener qe ensayar mi gramatica computacionl....

estoy probando, tambien vi por ahi qe se podria hacer con union:

SELECT * FROM tabla WHERE id=25
UNION
(SELECT * FROM tabla WHERE id<>25 ORDER BY id DESC)

o con case:

SELECT *
FROM tabla
ORDER BY CASE id
WHEN 25 THEN 0
ELSE id END DESC

voy a probar cual me funciona mejor y posteo los resultados.
saludos
  #5 (permalink)  
Antiguo 21/12/2010, 16:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: order by - fijar un registro como primero y luego el resto

Estimados,
la propuesta de david fue la mas sencilla de aplicar y funciona sin problemas.
("25" seria el numero qe estamos pasando y qeremos qe aparezca primero)

SELECT id, IF(id = 25, 1, 2) AS orden
FROM Tabla
ORDER BY orden, id DESC

agregue algunos otros datos y clausulas y quedo asi:
($idselec es la foto qe mostraremos primero y $tipo es la galeria qe quiero qe muestre, variables qe vienen del pool de fotos)

$q="SELECT id_foto, farm, foto, IF(id_foto = $idselec, 1, 2) AS orden FROM fotos,obras WHERE fotos.artistaO=obras.id_obra AND id_obra='$tipo' ORDER BY orden, id_foto DESC Limit $dato,6";

asi qe funciona perfecto por mas qe complejisemos la consulta.
gracias por su tiempo a todos.
saludos

Etiquetas: case, order, registros, sql
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 08:10.