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

[SOLUCIONADO] ORDER BY y OFFSET pero con letras

Estas en el tema de ORDER BY y OFFSET pero con letras en el foro de Mysql en Foros del Web. Hola gente, el título es un poco lioso pero es lo que necesito. Quiero mostrar resultados ordenados por un campo pero desde una determinada letra. ...
  #1 (permalink)  
Antiguo 21/05/2014, 12:21
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
ORDER BY y OFFSET pero con letras

Hola gente, el título es un poco lioso pero es lo que necesito.

Quiero mostrar resultados ordenados por un campo pero desde una determinada letra.

Para que me entendáis:
CAMPO: nombre
VALORES: antonio, bruno, jaime, jose, juan, pepe...

Y la consulta sería algo así como SELECT .... ORDER BY nombre OFFSET "jose";

Querría que en este caso me mostrara los resultados en este orden:
jose, juan, pepe, antonio, bruno, jaime.

Seguramente habrá alguna forma de hacerlo sencillo pero busco y busco y no laencuentro... gracias!!
  #2 (permalink)  
Antiguo 21/05/2014, 13:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ORDER BY y OFFSET pero con letras

OFFSET sólo aplica a LIMIT, y no a ORDER BY.
Lo que quieres se puede resolver en el WHERE de muchas formas.
Yo usaría algo como
Código MySQL:
Ver original
  1. WHERE CHAR(UPPER(LEFT(campo, 1))) BETWEEN CHAR('J') AND CHAR('Z')
__________________
¿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 21/05/2014, 14:21
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

Hola gnzsoloyo, gracias por responder.

En mi caso necesitaría poner palabras completas, no sólo las iniciales, y además que el último registro que devuelva sea el que va antes del inicio. Como he dicho en el ejemplo (VALORES: antonio, bruno, jaime, jose, juan, pepe...) mostraría:
1º jose
2ºjuan
3ºpepe
4ºantonio
5º: bruno
6º y ultimo: jaime

Lo que necesito es que muestre todos los registros en orden alfabético pero en vez de empezar por la A o Z que lo haga desde una conjunto de letras o palabra que yo le marque...
  #4 (permalink)  
Antiguo 09/06/2014, 11:08
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

Hola, ya estoy un poco vencido, he decidido cambiar de campo y que sea con números para que sea más sencillo.

Quiero que muestre todos los registros WHERE color="ejemplo" pero que empiece por el registro número X que yo le indique... esto es posible no??? (OFFSET no, ya que el registro es un campo con números salteados)

Me estoy volviendo loooco
  #5 (permalink)  
Antiguo 09/06/2014, 11:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ORDER BY y OFFSET pero con letras

La verdad es que lo que has planteado desde el inicio es un poco confuso, no resulta mínimamente razonable. Es complicado de entender la idea, porque no podemos representarnos lo que quieres obtener basados en campos y datos imaginarios.
Suele pasar. En BBDD razonamos sobre datos concretos, de entidades reales, para sistemas consistentes.
Si nos vienen con ejemplos "parecidos", todo se vuelve confuso, ya que tu idea de ejemplo resulta inaplicable a la lógica de BBDD y SQL.
Lo mejor que podrías hacernos es mostrarnos:
1) El CREATE TABLE de las tablas reales que trabajarás.
2) Un ejemplo real de datos que existan en esas tablas.
3) Una muestra real de los datos obtenidos actualmente en la queyr que uses.
4) Un ejemplo real de los datos que se desean obtener, en el orden a obtener.
5) Una explicación concreta de qué uso se pretende lograr.

No postees ejemplos basados en "josés", "Jjuanes" o "pedros". Los datos reales.
Sobre la basde de eso podremos entender mejor la idea, porque lo que hasta ahora nos has dicho no nos permite traducir tu problema a SQL, funciones nativas y consultas con uso de JOIN de ninguna clase.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 09/06/2014, 12:23
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

Está bien, ahí va todo:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `imagenes` (
  2.   `idRegistro` mediumint(6) NOT NULL,
  3.   `seccion` int(1) NOT NULL,
  4.   `nombre` varchar(30) NOT NULL,
  5.   `orden` tinyint(2) NOT NULL DEFAULT '99',
  6.   `activo` tinyint(1) NOT NULL DEFAULT '1',
  7.   PRIMARY KEY (`id`)

2.

Código MySQL:
Ver original
  1. 1   2   1   img787766.jpg       2   1
  2.     2   3   1   img787767.jpg       1   1
  3.     3   4   1   img787768.jpg       4   1
  4.     4   3   2   img696727.jpg       1   1
  5.     5   3   1   img787772.jpg       3   1

3.
SELECT nombre, orden FROM imagenes WHERE registro='1' ORDER BY orden;

Muestra:
1º - img787767.jpg, orden 1
2º - img787772.jpg, orden 3
3º - img787768.jpg, orden 4

4.
Quiero que muestre en orden ascendente pero desde la imagen con el nº de orden que yo le diga, por ejemplo desde el número de orden 3.

Mostraría:
1º - img787772.jpg, orden 3
2º - img787768.jpg, orden 4
3º - img787767.jpg, orden 1

5. Lo utilizo para un pase de imágenes con un Slideshow, y quiero decirle por qué imagen debe empezar, pero siempre manteniendo el orden correlativo, y volviendo a empezar por el 1 hasta que se muestren todas.

Espero que ahora sí que sí.
  #7 (permalink)  
Antiguo 09/06/2014, 12:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ORDER BY y OFFSET pero con letras

Cita:
Lo utilizo para un pase de imágenes con un Slideshow, y quiero decirle por qué imagen debe empezar, pero siempre manteniendo el orden correlativo, y volviendo a empezar por el 1 hasta que se muestren todas.
Esto es realmente lo importante. Y mas o menos como lo empezaba a sospechar, la cosa podía tener otra solución.
Tu tienes ya un ID incremental, y sobre la base de ese se puede trabajar simplemente con un UNION.
Supongamos que tienes el nombre del archivo desde el que quieres hacer el recorrido:
Cita:
img787767.jpg
En ese contexto, sería:
Código SQL:
Ver original
  1. SELECT *
  2. FROM imagenes
  3. WHERE id>=(SELECT id FROM imagenes WHERE nombre = 'img787767.jpg')
  4. UNION
  5. SELECT *
  6. FROM imagenes
  7. WHERE id < (SELECT id FROM imagenes WHERE nombre = 'img787767.jpg')

Si, por otro lado, tuvieses como referencia al ID de la imagen en la tabla, la sintaxis es más sencilla:

Código SQL:
Ver original
  1. SELECT *
  2. FROM imagenes
  3. WHERE id>=idBuscado
  4. UNION
  5. SELECT *
  6. FROM imagenes
  7. WHERE id < idBuscado

Me parece que por ahí podría andar la cosa...
__________________
¿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 09/06/2014, 13:15
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

Gracias por tu tiempo,

Lo que necesito es que el orden sea desde el número de ORDEN, el ID de la imagen es indiferente.

Había llegado a esta conclusión, dos consultas:
$_GET[orden]=3;

Código MySQL:
Ver original
  1. SELECT * FROM imagenes
  2. WHERE activo=1 AND idRegistro=".$_GET[idInmueble]." AND orden>=".$_GET[orden]." ORDER BY orden

y

Código MySQL:
Ver original
  1. SELECT * FROM imagenes
  2. WHERE activo=1 AND idRegistro=".$_GET[idInmueble]." AND orden<".$_GET[orden]." ORDER BY orden

y voy acumulando los registros en una variable y luego los muestra.

Ahora que me has dicho lo de UNION he probado a hacer esto pero no funciona, me muestra desde el orden 1:

Código MySQL:
Ver original
  1. SELECT * FROM imagenes
  2. WHERE activo=1 AND idRegistro=".$_GET[idInmueble]." AND orden>=".$_GET[orden]."
  3. UNION SELECT * FROM imagenes
  4. WHERE activo=1 AND idRegistro=".$_GET[idInmueble]." AND orden<".$_GET[orden]." ORDER BY orden

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Última edición por gnzsoloyo; 09/06/2014 a las 13:28
  #9 (permalink)  
Antiguo 09/06/2014, 13:19
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Supongamos que tienes el nombre del archivo desde el que quieres hacer el recorrido:

img787767.jpg
Lo que obtengo es el id de la imagen a empezar, el id real. Pero quiero que lo ordene a partir del campo orden de esa imagen. Me entiendes ahora??
  #10 (permalink)  
Antiguo 09/06/2014, 13: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: 17 años
Puntos: 2658
Respuesta: ORDER BY y OFFSET pero con letras

Cuando usas UNION, no puedes poner un ORDER BY así nomás, donde quieras, porque el ORDER BY final es el que imapcta sobre todo el resultado.
Ni tampoco podrías poner UNION, sino que debes usar UNION ALL.

Para lograr cosas tan enredadas hay que usar formas de cisulta sy subconsultas algo complejas.
Código MySQL:
Ver original
  1.     FROM
  2.         (SELECT *
  3.         FROM imagenes
  4.         WHERE id>=idBuscado
  5.         ORDER BY orden) T1
  6.     UNION ALL
  7.     SELECT *
  8.     FROM
  9.         (SELECT *
  10.         FROM imagenes
  11.         WHERE id < idBuscado
  12.         ORDER BY orden) T2

Ten bien presente que NO PUEDES poner un ORDER BY al final de esta consulta, porque reordenará todo el resultado.

Todos estos detalles salen del manual de referencia. tenlo presente.
__________________
¿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 10/06/2014, 02:53
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: ORDER BY y OFFSET pero con letras

El orden sigue siendo un poco confuso porque dependiendo de la imagen sale un orden u otro pero no me importa, lo importante es que aparecen todas y la primera es la que yo le indico, así que mil y una gracias por tu paciencia y ayuda!!!

Etiquetas: campo, letras, offset, order, select
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 10:56.