2017-01-21 4 views
1

таблица tbl_studentsВыравнивание по левому краю не работают отлично

Student_pid  name    email 
1    waheed    [email protected] 
2    fareed    [email protected] 

стола r_job_invitations

id_job email 
101  [email protected] 
101  [email protected] 
123  [email protected] 
123  [email protected] 

стола 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 

мой вопрос я получаю студент Doble время

По запросу, что результат должен дать 2 студентов, но это в результате 4 студента из-за работу ид не работает нормально включается.
Как я могу решить эту проблему?

ответ

1

быть осторожными с использованием Варса в вашем выборе вы можете быть subsject к инъекции SQL

в любом случае вы можете использовать отчетливыми для избежание дублирования значений

$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); 

И lloking вашего образца данных попробуйте также изменить порядок дзх таблиц

$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); 
+0

@AbdulWaheed please, который является таблицей nme для job_id? ... каким-либо образом distincnt применяется к результату не в том месте, где есть условие. – scaisEdge

+0

Не ясно, почему я не использую различные .. на основе вашего результата вы должны использовать этот пункт, потому что (я повторяю сам) предложение применяется к результату и не включает фильтр строк (где предложение) – scaisEdge

+0

@AbdulWaheed. я обновил ответ .. дайте мне знать – scaisEdge

1

Таблица приглашений кажется совершенно ненужной - и причиной ваших дубликатов. Написать запрос как:

SELECT s.student_pid 
FROM `r_job_groups` jtg LEFT JOIN 
     tbl_students s 
     ON jtg.student_id = s.student_pid 
WHERE jtg.group_id = ".$group." and jtg.job_id = ".$jobID; 

Я также подозреваю, что вы хотите JOIN и не LEFT JOIN.

+0

Требуется таблица приглашений для меня один раз проверьте обновленный вопрос. @Гордон –

0
SELECT jbi.*, 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=1 and jtg.job_id=109 and jtg.job_id=jbi.id_job 
Смежные вопросы