问题
我有两个不同的表,表名是 team_request 和团队。 [team_request] 拥有每个团队提交的唯一记录, [团队] 使用唯一的用户名保存重复记录但团队数据与 [team_request] 相同对于接受加入该团队的用户而言。
以下查询的预期结果:
我正在运行以下查询以获取待处理的挑战或团队请求,其具有从 [team_request] 获取所有团队的基本逻辑,其中该团队不存在于 [团队] 表或该用户未被忽略。
实际上查询正在做什么:
它从属于该用户的表 [team_request] 中获取所有行(团队),无论用户是例外还是忽略。
上面也忘了提及 fbC_status 是 [team_request] 中的一个字段,如果该用户忽略了该用户的电子邮件地址,则会保存该用户的电子邮件地址。
任何帮助或指导都会受到赞赏我只是坚持下去。
MySQL查询
SELECT *
FROM team_request
WHERE (c_emails LIKE '%joe@example.com%')
OR (c_emails LIKE '%9876543210%')
AND fbC_status NOT LIKE '%joe@example.com%'
AND fbC_status NOT LIKE '%9876543210%'
AND '%joe@example.com%' NOT IN
(SELECT username
FROM teams)
AND t_name NOT IN
(SELECT T.t_name
FROM team_request TR,
teams T
WHERE TR.t_name = T.t_name
AND T.username = '%joe@example.com%'
AND (TR.fbC_status NOT LIKE '%joe@example.com%'
AND TR.fbC_status NOT LIKE '%9876543210%'))
LIMIT 0, 30
答案 0 :(得分:2)
我建议您重新考虑数据库的结构,teams
表似乎与team_requests
重复,但考虑到当前的结构,请尝试以下方法:
@phone would be your '9876543210'
@username would be your 'joe@example.com'
SELECT r.*
FROM team_request r
WHERE (r.c_emails = @username OR r.c_emails = @phone)
AND r.fbC_status <> r.c_emails
AND r.t_name NOT IN ( SELECT t.name
FROM teams t
WHERE /* t.username = r.c_emails otherwise: */
t.username = @username /* OR t.phone = @phone*/
)
目前还不清楚所有字段的用途是什么,因此如果不进行更改,这种情况不太可行。注释掉的部分是我怀疑你应该使用的部分,但是我无法知道它们是否适用于你的表格。
您可以随意使用LIKE '%...%'
但请记住,如果用户有电子邮件at@email.com
,那么电子邮件acrobat@email.com
也存在的用户LIKE '%at@email.com%
'是将两者都匹配。