gpt4 book ai didi

mysql - 左连接不能正常工作

转载 作者:行者123 更新时间:2023-11-29 06:05:47 25 4
gpt4 key购买 nike

表 tbl_students

Student_pid     name                email
1 waheed waheed@gmail.com
2 fareed fareed@gmail.com

表 r_job_invitations

id_job   email
101 waheed@gmail.com
101 fareed@gmail.com
123 waheed@gmail.com
123 fareed@gmail.com

表 r_job_groups

student_id   job_id   group_id
1 101 1
2 101 2
1 123 1
2 123 2

从上面的 3 个表中,我试图让学生有条件。这是我的查询:

    $studentQuery = $conn->query("SELECT
s.student_pid,jbi.test_status
FROM `r_job_groups` jtg
LEFT JOIN tbl_students s ON jtg.student_id=s.student_pid
LEFT JOIN r_job_invitations jbi ON jbi.email=s.student_email
where jtg.group_id=".$group." and job_id=".$jobID );

从上面的查询中,对于值

$group = 1 and $jobID = 101

结果是这样的:

student_pid
1
1
2
2

实际结果应该是这样的:

student_pid
1
2

my issue is i am getting students doble time

根据查询,该结果应该给 2 个学生,但结果是 4 个学生,因为工作 ID 无法正常工作。
我该如何解决这个问题?

最佳答案

小心在你的选择中使用 vars 你可能会受到 sql 注入(inject)

无论如何你可以使用 distinct 来避免重复值

  $studentQuery = $conn->query("SELECT DISCINCT
s.student_pid
FROM `r_job_groups` jtg
LEFT JOIN tbl_students s ON jtg.student_id=s.student_pid
LEFT JOIN r_job_invitations jbi ON jbi.email=s.student_email
where jtg.group_id=".$group." and jtg job_id=".$jobID );

或者使用不同的动态表

  $studentQuery = $conn->query("SELECT 
s.student_pid
FROM `r_job_groups` jtg
LEFT JOIN ( select distinct student_pid
from tbl_students ) s ON jtg.student_id=s.student_pid
LEFT JOIN r_job_invitations jbi ON jbi.email=s.student_email
where jtg.group_id=".$group." and jtg.job_id=".$jobID );

并根据您的数据样本尝试更改 joi 表的顺序

$studentQuery = $conn->query("SELECT DISTINCT s.student_pid
FROM tbl_students s
LEFT `r_job_groups` jtg s ON jtg.student_id=s.student_pid
LEFT JOIN r_job_invitations jbi ON jbi.email=s.student_email
where jtg.group_id=".$group." and job_id=".$jobID );

关于mysql - 左连接不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com