Объедините две таблицы mysql и покажите статус зарегистрированных субъектов и незарегистрированных субъектов - PullRequest
0 голосов
/ 14 июля 2020

У меня две таблицы. Таблица Enrolledsubjects, которая содержит предметы, по которым учащиеся были зачислены, и таблица stsubjects, содержащая все предметы, по которым учащиеся должны быть зачислены

Таблица enrolledsubjects

c_id  |  Subject  |   Unit | Term  
 ----------------------------------
  1   |  English  |    3   | first
  2   |  Physics  |    2   | first
  3   |  Maths    |    3   | first

Таблица stsubjects

s_id  |  Subject  |  Unit  | term
----------------------------------
 1    |  Chemistry | 4     | first
 4    |  Computer  | 3     | first
 5    |  English   | 3     | second
 6    |  Physics   | 5     | second
 7    | Mathematics| 3     | first

Я пытаюсь объединить обе таблицы, где из stsubjects должны быть выбраны только значения, отсутствующие в таблице Enrolledsubjects. Это то, что я пробовал до сих пор ..

Это таблица, которую я пытаюсь получить

## Expected Table ##

  id  |  Subject  |  Unit  | term | Status
--------------------------------------------
 1    |  Chemistry | 4     | first|  None
 4    |  Computer  | 3     | first|  None
 5    |  English   | 3     | second| Already Added
 6    |  Physics   | 5     | second| Already Added
 7    | Mathematics| 3     | first| Already Added

Это мой PHP Код

 <form action="" method="POST">
     <table id="" class="table table-striped>
          <thead>
             <tr>
                <th>S/N</th>
                 <th><input type="checkbox"></th>
                  <th>Subject</th>
                   <th>Unit</th>
                    <th>Status</th>
                 </tr>
             </thead>
     
            <tbody>
           <?php
            $count = 1;
             $stmt = $conn->prepare("SELECT c_id, subject, unit FROM 
               enrolledsubjects 
                   WHERE username ='".$getid."' AND term= '".$_GET['term']."' 
                   UNION 
                   (SELECT s_id, subject, unit FROM stsubjects WHERE term = 
                    '".$_GET['term']."' AND subject, unit
                  NOT IN
                   (SELECT c_id, subject, unit FROM enrolledsubjects WHERE 
                  username = '".$getid."' AND term = '".$_GET['term']."'))");
             
               $stmt->execute();
              $stmt->bind_result($c_id, $subject,$unit,$s_id);
              $result = $stmt->get_result();
               if($result->num_rows > 0){
                while($rows = $result->fetch_assoc()){
               $c_id = $rows['c_id'];
               $s_id = $rows['s_id'];
               $subject = $rows['subject'];
               $unit = $rows['unit'];
                   ?>
               

           <tbody>
               <?php 
                 if(isset($rows['c_id'])){
                    $status = "Already Added";
                      $select = '<td><input type="checkbox" 
                         name="checked_id[]" id="select_all" disabled 
                           CHECKED="CHECKED" value=""/>
                          ' . $rowc['c_id'].'</td>';
                        }else{ 
            $status = 'None';
            $select = '<td><input type="checkbox" name="checked_id[]" 
              id="select_all" value=""/>
                   ' . $rowc['s_id'].'</td>';
          }
          ?>
               <tr>
                 <td><?php echo $cnt;?></td>
                <td><?php echo $select;?></td>
               <td><?php echo $subject;?></td>
               <td><?php echo $unit;?></td>
              <td><?php echo $status;?></td>
            </tr>
               <?php 
                  $cnt++;
                       }}
                     ?>

                                    
                     </tbody>
              </table>
               </form>

I получена синтаксическая ошибка mysqli.

Пожалуйста, мне нужна ваша помощь

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вы ищете left join:

select s.id, s.subject, s.unit, s.term,
       (case when es.subject is null then 'None' else 'Already added' end) as status
from stsubjects s left join
     enrolledsubjects es
     on es.subject = s.subject and es.c_id = ?;

Обратите внимание, что ? является заполнителем параметра для интересующего вас ученика. Используйте параметры вместо изменения строк запроса.

0 голосов
/ 14 июля 2020

Попробуйте описанный ниже способ - вам не хватает «И»

SELECT c_id, subject, unit FROM enrolledsubjects 
    WHERE username = '".$getid."' AND term = '".$_GET['term']."'
UNION 
SELECT s_id, subject, unit FROM stsubjects
   WHERE term = '".$_GET['term']."'
and subject NOT IN(SELECT subject enrolledsubjects 
   WHERE username = '".$getid."' AND term = '".$_GET['term']."')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...