问题
我有两个不同的表,表名称是team_request和teams。 [team_request] 拥有提交的每个团队的唯一记录,[teams] 使用唯一用户名保存重复记录,但团队数据与 [team_request] 中相同对于接受加入该团队的用户。
以下查询的预期结果:
我正在运行以下查询来获取待处理的挑战或团队请求,其基本逻辑是从 [team_request] 获取所有团队,而该团队在 中不存在[teams] 表或尚未被该用户忽略。
实际上查询正在做什么:
它从表[team_request]中获取属于该用户的所有行(团队),无论用户是否已异常(exception)或忽略。
还忘了提到上面fbC_status是[team_request]中的一个字段,如果用户忽略了成为团队的一部分,它会保存用户的电子邮件地址。
任何帮助或指导将不胜感激,我只是被困住了。
MySQL 查询
SELECT *
FROM team_request
WHERE (c_emails LIKE '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a4cecbc1e4c1dcc5c9d4c8c18ac7cbc9" rel="noreferrer noopener nofollow">[email protected]</a>%')
OR (c_emails LIKE '%9876543210%')
AND fbC_status NOT LIKE '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dcb6b3b99cb9a4bdb1acb0b9f2bfb3b1" rel="noreferrer noopener nofollow">[email protected]</a>%'
AND fbC_status NOT LIKE '%9876543210%'
AND '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5832373d183d20393528343d763b3735" rel="noreferrer noopener nofollow">[email protected]</a>%' 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 = '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95fffaf0d5f0edf4f8e5f9f0bbf6faf8" rel="noreferrer noopener nofollow">[email protected]</a>%'
AND (TR.fbC_status NOT LIKE '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4923262c092c31282439252c672a2624" rel="noreferrer noopener nofollow">[email protected]</a>%'
AND TR.fbC_status NOT LIKE '%9876543210%'))
LIMIT 0, 30
最佳答案
我建议你重新考虑你的数据库的结构,你的teams
表似乎几乎是 team_requests
的重复项但考虑到当前的结构,请尝试以下操作:
@phone would be your '9876543210'
@username would be your '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b8d2d7ddf8ddc0d9d5c8d4dd96dbd7d5" rel="noreferrer noopener nofollow">[email protected]</a>'
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 '%...%'
但请记住,如果用户有电子邮件 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="37564377525a565e5b1954585a" rel="noreferrer noopener nofollow">[email protected]</a>
,当用户的电子邮件地址为 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2a4b495845484b5e6a4f474b434604494547" rel="noreferrer noopener nofollow">[email protected]</a>
时也存在LIKE '%<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91f0e5d1f4fcf0f8fdbff2fefc" rel="noreferrer noopener nofollow">[email protected]</a>%
' 将匹配它们。
关于php - 嵌套查询无法正确获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143377/