1

我为我的学校制作了一个事件系统来处理事件的注册。

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

我还有一个名为registrations的表。每当用户注册一个事件时,它就会被添加到这个表中。条目如下所示:registrationideventid(事件表的外键)、userid(也是用户表的外键,而不是潜在用户)。

我想使用 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} -> 这是第一个问题,因为注册表不包含电子邮件列,只有对包含电子邮件的用户表中用户的引用。

{2} -> 只是为了分隔事件,7 只是一个例子。

最后我想返回这样的东西:

对不起使用excel

4

3 回答 3

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%'
于 2013-10-03T22:17:51.410 回答
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;
于 2013-10-03T21:32:41.530 回答
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 中将其变白。你必须做一些修正。

于 2013-10-03T21:46:58.070 回答