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

Ayudilla con un query :) ?

Estas en el tema de Ayudilla con un query :) ? en el foro de Mysql en Foros del Web. Hola todos! Necesito hacer un query bastante simple, pero me complico para lograrlo. Tengo 1 tabla con varias rows, que representan textos escritos por distintos ...
  #1 (permalink)  
Antiguo 08/04/2008, 18:28
Avatar de uruguay234  
Fecha de Ingreso: marzo-2008
Mensajes: 4
Antigüedad: 16 años, 8 meses
Puntos: 0
Pregunta Ayudilla con un query :) ?

Hola todos!
Necesito hacer un query bastante simple, pero me complico para lograrlo.


Tengo 1 tabla con varias rows, que representan textos escritos por distintos usuarios.
Las columnas son basicamente: id | usuario | texto


Lo que quiero lograr es, al seleccionar determinada ID dentro de la tabla, saber cúal es el ID de la row anterior (del mismo usuario) y cual es el ID de la row siguiente (del mismo usuario).


Basicamente es para lograr links de "Anterior y Siguiente" para cada usuario!
Creo que lo estoy pensando de una forma complicada y tal vez resulte ser facil!


Gracias desde ya por su ayuda!
  #2 (permalink)  
Antiguo 09/04/2008, 01:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Re: Ayudilla con un query :) ?

Dices
Cita:

Tengo 1 tabla con varias rows, que representan textos escritos por distintos usuarios.
Las columnas son básicamente: id | usuario | texto

Lo que quiero lograr es, al seleccionar determinada ID dentro de la tabla, saber cúal es el ID de la row anterior (del mismo usuario) y cual es el ID de la row siguiente (del mismo usuario).
Para eso tienes que decirnos antes qué criterio vas a seguir para seleccionar la primera ID de ese autor; por ejemplo si vas a buscar un texto concreto de ese autor, si sólo vas a buscar una de ese autor al azar, o vas a seleccionar todo al azar. Hacer esto con PHP, por ejemplo, es fácil, pues cuando cargas, aunque sea al azar, encuentras un id, un autor o un texto, ya tienes un punto de referencia para buscar los dos anteriores. Aquí sacas al azar un dato.
SELECT * FROM tabla order by rand() limit 1,
De esa consulta cargas en PHP mediante las funciones pertinentes el $id=$row['id'], $autor=$row['autor'] y $texto=$row['texto']
Ahora es fácil con dos union all traérte lo que quieres en una sola consulta (en realidad es la segunda consulta):
(SELECT * FROM tabla WHERE id > $id AND autor LIKE '$autor' ORDER BY id DESC LIMIT 1)
UNION ALL
(SELECT * FROM tabla WHERE id = $id)
UNION ALL
(SELECT * FROM tabla WHERE id < $id AND autor LIKE= '$autor') ORDER BY id DESC LIMIT 1)
Con PHP podrías también traértelo en tres consultas..., pero eso podrás pedirlo en el foro PHP.
Otra cosa es hacerlo con una única consulta y con MySQl, pero para eso deberías tener ya el dato, por ejemplo haber cargado en un formulario de búsqueda dentro de input text los datos que quieras o escribirlos directamente en la consulta MySQL. Aquí un ejemplo con nombre de autor y parte de texto...

(SELECT * FROM tabla WHERE id > (SELECT id FROM tabla WHERE autor = 'nombreautor%' AND texto = '%partetexto%') ORDER BY id DESC LIMIT 1)
UNION ALL
(SELECT * FROM tabla WHERE autor = 'nombreautor%' AND texto = '%partetexto%')
UNION ALL
(SELECT * FROM tabla WHERE id < (SELECT id FROM tabla WHERE autor= 'nombreautor%' AND texto = '%partetexto%') ORDER BY id DESC LIMIT 1)

Como ves la solución es con UNION ALL, aunque en PHP, como te he dicho, podrían hacerse tres consultas sin necesidad de usar UNION ALL; a una de ellas le llamarías anterior y a otra posterior..., aunque los criterios de búsqueda serían parecidos a los de la primera consulta que te puse...
Esto de la única consulta MysQL no se me ha ocurrido a mí, sino que es obra de Jose_minglein2 y me lo encontré en el siguiente post del foro donde se trata el tema y podrás encontrar más soluciones:
Revisa este POST
http://www.forosdelweb.com/f86/obten...ores-x-336794/

Mira esta otra de Jose_minglein2:
select * from tabla T where (id > (select id from tabla where autor='nombre') and id < (select id + 1 from tabla where autor='nombre')) or (id < (select id from tabla where autor='nombre') and id > (select id - 1 from tabla where autor='nombre'))

Pero, claro, primero tendrías que añadir otro criterio además del de autor, pues si no hay otro criterio, aunque sea el orden por el criterio que sea (alfabético descendente, ascendente, etc.), te sacará el primero que introdujiste en la base, y si no limitas, te sacará todos los de ese autor...


Espero haberlo aplicado bien. No lo he probado. Comprueba los resultados y ya nos dirás.

Última edición por jurena; 09/04/2008 a las 02:33
  #3 (permalink)  
Antiguo 09/04/2008, 18:37
 
Fecha de Ingreso: noviembre-2007
Ubicación: www.shiftcolombia.com Villavicencio, Colombia
Mensajes: 9
Antigüedad: 17 años
Puntos: 0
Busqueda Re: Ayudilla con un query :) ?

yo utilice un paginador de mysql y en la paginacion coloca los links

y el orden del anterior y siguiente por usuario lo puede hacer asi
si lo que quieres es un resultado de todos los usuarios

select id, usuario, texto from tu_tabla order by usuario, id

id usuario Text
1111 Alicia Molano
4033 Andrea akdfjlasdfjklasdfjkafh
2222 Rocio dgslgjñdgs

y si el texto es una dir en tu server le concatenas la etiqueta de ipervinvulo o lo cargas por php y html

la solucion estara en funcionamiento en

www.institutoinfo.unillanos.edu.co en la seccion noticias y eventos

o esta lista para postgres
en el foro paginacion postgresql aqui en forosdelweb

solo cambias la consulta y ya
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:55.