我试图为用户编写一个事件寄存器。
我在php编码。
必须显示用户已注册和未注册的所有事件。
这是表中的主键。:
USUARIO USUARIO_EVENTO EVENTO
idlogin_user idlogin_user cod_event
cod_event
它从cookie变量idlogin_user中获取id美元userlogueado
实际发生的事情是假设我只有一个用户,就像idlogin_user总是相同的,即使不总是相同的idlogin_user记录。
我已经尝试过UNION和JOIN和其他句子,但它们都不起作用。
我使用这两个查询:
$query = mysql_query (
"select distinct
evento.cod_event,
evento.comienzo,
evento.fin,
evento.coste,
evento.nombre_event
from evento
WHERE (evento.cod_event not in (select distinct usuario_evento.cod_event from usuario_evento))");
$query2 = mysql_query ("select evento.cod_event,
evento.comienzo,
evento.fin,
evento.coste,
evento.nombre_event
from evento
INNER JOIN usuario_evento
WHERE (evento.cod_event = usuario_evento.cod_event)
UNION
(select * from usuario_evento where idlogin_user = $userlogueado)
");
我要做的是为用户注册的事件和未注册的事件创建两个单独的查询。
假设user_events是多对多映射表,用户只能注册一次事件
SELECT * FROM user_events where user_id = '123';
然后选择用户未注册的事件并按用户id分组,因为将有许多用户为该事件注册。
SELECT * FROM user_events where event_id NOT IN(
SELECT event_id FROM user_events where user_id = '123'
) GROUP BY event_id
试试这个
SELECT cod_event, idlogin_user, 1 AS participance
FROM EVENTO
JOIN USUARIO_EVENTO ON EVENTO.cod_event = USUARIO_EVENTO.cod_event
JOIN USUARIO ON USUARIO_EVENTO.idlogin_user = USUARIO.idlogin_user
UNION
SELECT outerEvento.cod_event, outerUsuario.idlogin_user, 0 AS participance
FROM EVENTO outerEvento
CROSS JOIN USUARIO outerUsuario
WHERE NOT EXISTS
(
SELECT cod_event, idlogin_user
FROM EVENTO innerEvento
JOIN USUARIO_EVENTO innerUsuarioEvento ON innerEvento.cod_event = innerUsuarioEvento.cod_event
JOIN USUARIO innerUsuario ON innerUsuarioEvento.idlogin_user = innerUsuario.idlogin_user
WHERE outerEvento.cod_event = innerEvento.cod_event AND outerUsuario.idlogin_user = innerUsuario.idlogin_user
)
列participance显示用户是否参与(1)