2013-10-03 108 views
1

我为我的学校制作了一个事件系统,用于处理事件注册。MySQL加入两个列表以检查是否存在记录

由于我们只希望学生访问网站上的注册,所以我有一个表潜在用户。每个条目都有一个FullName和一个电子邮件。 当用户在网站上注册时,网站会检查学生的电子邮件是否在潜在用户表中,如果是,则将该用户添加到用户表中。

我也有一个表注册。每当用户注册一个事件时,它都被添加到这个表中。 一个条目看起来是这样的:registrationid事件ID(外键事件表),用户ID(也有外键的用户表,而不是potentialusers)。

我想使用LIKE语句搜索一个名称,并获取用户的结果列表,指定用户是否注册了该事件的列以及指出用户是否甚至完全注册的列。

这是我试过(我加了大括号的一些评论):

SELECT FullName, Email from potentialusers 
LEFT OUTER JOIN registrations ON (potentialusers.Email = registrations...{1}) 
WHERE events.eventid = '7'{2} AND potentialusers.Email LIKE = '%jazerix%'; 

{1} - >这是第一个问题,因为,登记表不包含电子邮件列,只有在usertable中包含电子邮件的用户的引用。

{2} - >就这样我们可以分开事件,7只是一个例子。

在我想回到这样的结尾:

sorry for the use of excel

+0

什么是用户连接到potentialusers领域? – AgRizzo

+0

像个外键?或者是什么? :) – Jazerix

+0

连接的用户和潜在用户的字段名称是外键关系? – AgRizzo

回答

1

试试这个:

SELECT 
    p.FullName, 
    p.Email, 
    IF(u.userid IS NULL, 'False', 'True') RegisteredInSystem, 
    IF(r.registrationid IS NULL, 'False', 'True') RegisteredInEvent 
FROM potentialusers p 
LEFT JOIN users ON p.Email = u.useremail 
LEFT JOIN registrations r ON r.userid = u.id AND r.eventid = 7 
WHERE p.FullName LIKE '%jazerix%' 
+0

好吧!这肯定会给我一些有趣的结果! :D但是我说得对,当我说这只是检查用户是否实际注册在系统中,因为这是返回结果,说“已注册”,但它没有registriondid与它关联。 另外我更改p.Email到p.FullName :) – Jazerix

+0

是的,这正是我需要^^。如果问题不是太多,你可以向我展示你的例子吗? :D – Jazerix

+0

哦,我的天啊!它的工作,这真的值得等待,非常感谢你。哦,我的天啊,你不知道我现在有多少微笑:D你们摇滚,莫斯蒂Mostacho和AgRizzo:D – Jazerix

1
SELECT potentialusers.FullName, potentialusers.Email 
, IF(users.userid IS NULL, 'False', 'True') Registered 
, registration.registrationid 
FROM potentialusers 
LEFT JOIN users 
    ON potentialusers.Email = users. useremail 
LEFT JOIN registrations 
    ON registrations.userid = users.id 
WHERE potentialusers.Email LIKE '%jazerix%' 
    AND registrations.eventid = 7; 
+0

让我试试看,谢谢! :D – Jazerix

+0

我没有得到它的工作对不起:( – Jazerix

+0

如果我是正确的,这将永远不会给你一个结果,如果注册将是错误的。 –

0

我想应该是这样的

select 
pus.fullname, 
rg.email, 
case (select count(*) from registrations where usr.id=foreignkey_connection_to_this_table) 
when 0 then 'FALSE' 
when 1 then 'TRUE' 
else 'MULTIPLE REGISTRATIONS' 
end as registered, 
rg.id as registration_id 
from potentialusers pus 
join users usr using(foreign key connection to this table) 
join event evt using(foreign key connection to this table) 
join registrations rg using(foreign key connection to this table) 
WHERE events.eventid = '7' AND potentialusers.Email LIKE = '%jazerix%'; 

我不知道你的数据库模型,所以我白色它在'伪'sql.You必须做一些核心。

+0

注册不包含电子邮件属性:/ – Jazerix

+0

iam对不起尝试编辑它到usr.email –