嵌套查询无法正确获取数据

时间:2013-11-22 11:07:55

标签: php mysql sql

问题

我有两个不同的表,表名是 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

1 个答案:

答案 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%'是将两者都匹配。