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

Registro a partir de subconsulta

Estas en el tema de Registro a partir de subconsulta en el foro de Mysql en Foros del Web. Hola! no sé como hacer lo siguiente, tengo 2 tablas: Avisos con los campos: id, texto avisosAtendidos con los campos: avisos_id, usuarios_id Un aviso es ...
  #1 (permalink)  
Antiguo 04/05/2007, 04:13
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 3
Registro a partir de subconsulta

Hola! no sé como hacer lo siguiente, tengo 2 tablas:

Avisos con los campos: id, texto
avisosAtendidos con los campos: avisos_id, usuarios_id

Un aviso es atendido por un usuario X cuando hay un registro en la tabla avisosAtentidos con los valores avisos_id = ID del aviso y usuarios_id = X (ID del usuario). Como podría devolver este valor en una consulta SQL?

Quiero hacer algo así

select leido = (select avisos_id from avisosAtendidos where usuarios_id = X)
from avisos av;

Es decir, quiero saber a partir de todos los avisos, si un usuario lo ha atentido o no.

Espero que quede clara mi consulta.
  #2 (permalink)  
Antiguo 04/05/2007, 04:58
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Registro a partir de subconsulta

Hola Kas aPPeaL, te refieres a una sola consulta que te vincule las dos tablas ???
__________________
->Aprender es un proceso que incluye el error..
  #3 (permalink)  
Antiguo 04/05/2007, 05:13
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 3
Re: Registro a partir de subconsulta

No sé exactamente si es eso, no controlo mucho de SQL. El caso es que quiero devolver un valor true o false a partir de una consulta. Es decir

select leido = (select avisos_id from avisosAtendidos where usuarios_id = X)
from avisos av;

donde leido tome el valor true (por ejemplo) cuando el select "select avisos_id from avisosAtendidos where usuarios_id = X" tenga al menos un registro y en caso contrario devolver false.

Esto lo quiero hacer para sacar un listado de los campos de la tabla avisos, mas el campo leido de manera que pueda saber si un aviso ha sido leido o no por un usuario
  #4 (permalink)  
Antiguo 04/05/2007, 06:30
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Registro a partir de subconsulta

Buenas nuevamente, a ver, tu tabla avisosAtendidos registra el identificador del usuario y el identificador del aviso que ha leido.
Si lo que quieres es saber que aviso a leido un usuario seria :
SELECT Avisos.id FROM Avisos,avisosAtendidos WHERE Avisos.id=avisosAtendido.avisos_id AND avisosAtendidos.usuarios_id=X;
Esto te devolveria el identificador del aviso que ha leido el usuario, si deseas ver el texto debes agregar SELECT Avisos.id,Avisos.texto

Pienso que si por ejemplo quieres saber que avisos no ha leido un usuario, quizas debas ejecutar algo como
SELECT avisos_id FROM avisos Atendidos WHERE usuarios_id=X
Entonces la consulta te devolvera los avisos que si ha leido, entonces los que no esten seran los que no ha leido. Por ejemplo que tu tabla Avisos tiene 10 registros, y en la tabla avisosAtendidos tengas algo asi:
avisos_id | usuarios_id
1 | 1
2 | 1
7 | 1
5 | 1

Entonces los avisos que el usuario con identificador 1 no ha leido son los avisos 3,4,6,8,9 y 10.
Es mas o menos asi???. Saludos
__________________
->Aprender es un proceso que incluye el error..
  #5 (permalink)  
Antiguo 04/05/2007, 06:37
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 3
Re: Registro a partir de subconsulta

Ya lo he solucionado:

select id, titulo, fechaCreacion (id, $idUsuario) = (select avisos_id, usuarios_id from atiendenavisos) as leido from avisos;
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 23:31.