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

Ayuda con una sentencia SQL

Estas en el tema de Ayuda con una sentencia SQL en el foro de Bases de Datos General en Foros del Web. Tal vez alguién puede ayudarme con una sentencia. Tengo la tabla items de la cual quiero cargar 5 valores. Uno de los campos es el ...
  #1 (permalink)  
Antiguo 17/06/2005, 11:06
Avatar de cvander
Moderador
 
Fecha de Ingreso: abril-2001
Ubicación: Ciudadano del mundo
Mensajes: 13.638
Antigüedad: 23 años
Puntos: 1792
Ayuda con una sentencia SQL

Tal vez alguién puede ayudarme con una sentencia.

Tengo la tabla items de la cual quiero cargar 5 valores.

Uno de los campos es el id_feed que hace referencia a otra tabla y que en varios casos es repetido. Lo que me interesa es seleccionar los 5 valores, pero asegurándome que este campo sea siempre diferente.

Intenté con

SELECT DISTINCT id_feed, titulo, nombre, fecha, activado from items ORDER BY fecha

Pero estoy viendo que el DISTINCT no me funcionará si quiero incluir más campos.

Algo que se les ocurra que pueda hacer en este caso?
__________________
- Christian Van Der Henst
Platzi
  #2 (permalink)  
Antiguo 17/06/2005, 14:54
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Eje!!!! que tal... Lo que hace el distinct es eliminar las rows repetidas... Pero toooodos los campos deben de repetirse, es decir rows exactamente iguales, en tu caso lo unico que se repite es id_feed
  #3 (permalink)  
Antiguo 17/06/2005, 15:09
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Aunque tienes un caso medio raro... el campo id_feed hace referencia a otra tabla y se repite... entonces es foreign key. Lo que me hace pensar es que estás haciendo un select de una tabla hija, si es que la primary key es compuesta... u otro caso puede ser que haga referencia a una tabla maestra pero en ese caso no tendría mucha lógica el select...

Puede que algo esté mal en el modelo entidad/relacion para que necesites hacer un select como el que quieres hacer

Última edición por Developer9; 17/06/2005 a las 15:14
  #4 (permalink)  
Antiguo 17/06/2005, 15:51
Avatar de sir_joshua  
Fecha de Ingreso: diciembre-2004
Mensajes: 411
Antigüedad: 19 años, 4 meses
Puntos: 0
a reserva de saber como esta compuesta tu tabla y que tipo de informacion pretendes obtener con dicho query.... te diria que lo que necesitas es agrupar por el campo id_feed, aunke necesitaras usar alguna funcion de agrupamiento .... sin embargo, si tu query tiene alguna columna que no hay modo de agruparlo, este query seria muy complicado y tendrias que usar funciones de conjuntos y esas solo las he visto en Oracle .... cheka esta pagina:

http://www.adp-gmbh.ch/ora/sql/

salu2.
__________________
http://sir-joshua.hi5.com
Mex. Mex.
  #5 (permalink)  
Antiguo 17/06/2005, 16:55
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hola!

Con que estás trabajando, MySql o Sql Server ?
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #6 (permalink)  
Antiguo 17/06/2005, 16:57
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hola!

-------------------------

Editado... puse un metodo que no sirve...

No, ese metodo no sirve

-------------------------

Por otra parte, viendo mas a fondo el problema, creo que el problema realmente radica en que deseas hacer un select de items repetidos diferentes, es decir, no pudes seleccionar los 5 valores, diciendo que uno de ellos es diferente, porque no sabes que va a pasar con esos valores que no son iguales, no se si me explique...

Por esa razón creo que necesitas usar un CURSOR para definir que campos quieres, algo como

while

@ID <> @LastID
print "resultados"

end

Pero ya sea en un cursor o en tu script de PHP o ASP.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com

Última edición por Neuron_376; 17/06/2005 a las 18:12
  #7 (permalink)  
Antiguo 17/06/2005, 18:28
Avatar de cvander
Moderador
 
Fecha de Ingreso: abril-2001
Ubicación: Ciudadano del mundo
Mensajes: 13.638
Antigüedad: 23 años
Puntos: 1792
Estoy usando MySQL.

Y con respecto a hacerlo con PHP si lo encontré más fácil..

Simplemente los ordeno por id_feed y luego por fecha..

Y luego una funcion:

if ($row("id_feed) <> $id_feed) {

... imprima no repetidos

}
$id_feed = $row("id_feed);

Y creí haber solucionado el problema.... pero.....
Dependiente de esa consulta también se genera la paginación, que muestra de 10 en 10 los registros y hace un par de cosas adicionales. Así que lo más sencillo era modificar el SQL.

Si a alguién se le ocurre algo con SQL se los agradeceré. Sino me pongo a buscarle solución vía progra con php.
__________________
- Christian Van Der Henst
Platzi
  #8 (permalink)  
Antiguo 17/06/2005, 21:48
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 1 mes
Puntos: 2
Hola

Las nuevas versiones de MySql también soportan cursores, me parece que a partir de la versión 4.1.XX, depende de cual tengas, y el trabajo que estás haciendo de limpiar tus resultados lo harias ahí mismo en la consulta usando un cursor, así recibes los resultados ya limpios.

Bueno, en MySql nunca he hecho un cursor porque yo tengo versiones viejas de MySql, pero si los he hecho en SQL Server y esa sería una buena solución, además de regresar las cosas tal como las quieres, también es más eficiente.

Bueno, por otra parte la verdad habría que ver que es lo que necesitas obtener, porque lo que veo es que si quieres una paginación de resultados, pero estás despreciando algunos campos, es decir...

id_feed, titulo, nombre, fecha, activado

1, Titulo1, Nombre1, Fecha1, Si
1, Titulo1, Nombre1, Fecha2, Si
1, Titulo1, Nombre1, Fecha3, Si
1, Titulo1, Nombre1, Fecha4, Si

Creo que tienes algo así, entonces existen más campos involucrados para hacer la consulta, o bien para decidir que deben ser mostrados, entonces debes decir también que otras condiciones necesitas para poder mostrar los registros, ahora pienso que siempre necesitas el registro con la fecha mas reciente... como...

select * from Tabla where Max(Fecha)

Bueno, eso esta mal, pero creo que sería lo que necesitas... esta tabla aparenta ser algo como logs, o algo por el estilo, la verdad no se como lo tengas

Por otra parte has pruebas con cosas como:

select Distinct ID, Fecha from tabla
group by Fecha
order by Fecha desc

select ID, Tit, Nom, Mx(Fecha) from select Distinct ID from TuTabla

No lo he probado, pero una combinación de esos casos, podría dar resultado, por otra parte, el cursor seguro lo soluciona.

Suerte con todo!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
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 19:32.