2016-03-09 2 views
-1

Как сравнить 2 значения из 2-х таблиц?Как сравнить 2 значения каждой строки из 2 таблиц?

У меня есть 2 в то время как (вложенное время), но таблица проверяет один за другим, а результат во второй таблице - из каждой строки в первой таблице. Как сделать результат напечатан один раз?

я хочу результат, как этот result's image

и вот мой код в настоящее время

<?php    
        $query1 = mysql_query("SELECT * FROM riwayat_training_detail AS s JOIN materi AS t JOIN riwayat_training AS u JOIN karyawn AS v WHERE v.id_karyawan = $id1 AND s.nik LIKE v.nik AND u.subject no LIKE t.subject no AND s.id_riwayat_training LIKE u.id_riwayat_training "); 
        $i=1; 
        while($row1 = mysql_fetch_array($query1)) 
        { 
         $date = $row1['date']; 
         $subject1 = $row1['subject name']; 
       ?> 
      <table class="table table-bordered"> 
       <tr> 
        Training yang diikuti 
        <td class="table-bordered">No</td> 
        <td class="table-bordered">date</td> 
        <td class="table-bordered">subject date</td> 
        <td class="table-bordered">No SOP</td> 
        <td class="table-bordered">revision no</td> 
        <td class="table-bordered">Trainer</td> 
        <td class="table-bordered">institution</td> 
       </tr> 

       <tr> 
        <td class="table-bordered"><?php echo $i; ?></td> 
        <td class="table-bordered"><?php echo date("j/F/Y", strtotime($date)); ?></td> 
        <td class="table-bordered"><?php echo $subject1; ?></td> 
        <td class="table-bordered"><?php echo $row1['no_sop']; ?></td> 
        <td class="table-bordered"><?php echo $row1['revision_no']; ?></td> 
        <td class="table-bordered"><?php echo $row1['trainer']; ?></td> 
        <td class="table-bordered"><?php echo $row1['institution']; ?></td> 
       </tr> 
      </br> 
      <table class="table table-bordered"> 
       <tr> 
        Training yang belum diikuti 
        <td class="table-bordered">No</td> 
        <td class="table-bordered">subject no</td> 
        <td class="table-bordered">subject date</td> 
        <td class="table-bordered">No SOP</td> 
       </tr> 
       <?php 
        $query2 = mysql_query("SELECT * FROM header_jabatan AS r JOIN materi AS q JOIN karyawn AS p WHERE q.subject no LIKE r.id_header AND r.id_jabatan LIKE p.id_jabatan AND p.id_karyawan = $id1 ORDER BY q.subject no ASC"); 
        $x=1; 
        while($row2 = mysql_fetch_array($query2)) 
        { 
         $subject2 = $row2['subject name']; 
         if (strcasecmp($materi1, $materi2) != 0) 
         { 
       ?> 
       <tr> 
        <td class="table-bordered"><?php echo $i; ?></td> 
        <td class="table-bordered"><?php echo $row2['subject no'] ?></td> 
        <td class="table-bordered"><?php echo $subject22; ?></td> 
        <td class="table-bordered"><?php echo $row2['no_sop']; ?></td> 
       </tr>  
       <?php 
         } 
        $x++;  
        } 
        $i++; 
       } 

       ?> 
      </table> 
     </table> 

пожалуйста, помогите мне, что я должен делать?

это мой второй вопрос с той же теме, я действительно нужна помощь IM застрял с этим ..

+1

Пожалуйста, не используйте mysql_ * функции HTTP://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – n00bstacker

+0

Как работает ваш запрос ...? Синтаксис полностью сломан ... – Siyual

ответ

0

вы можете использовать СЛУЧАЙ себе Проверить эту ссылку подробнее, как использовать его.

check this link

0

Является ли это что-то вдоль линии, что вы хотите?

UPDATE table2 SET Status = "YES" WHERE SubjectName IN (SELECT SubjectName FROM table1) 

Или вы хотите, чтобы он также использовал ревизию? Ваша фотография говорит только о SubjectName.

+0

Спасибо за ответ. Но если есть новый ввод, он будет автоматически обновляться? –

+0

@MochammadHelmi Если новая информация добавлена ​​в таблицу1, тогда запрос должен быть повторен. Если вы сделали обновление и добавили только один новый столбец, вы можете использовать запрос, который я использовал в ответе, но вы можете добавить предложение WHERE к вложенному SELECT, чтобы он выполнял поиск только для определенной части информации, которая была добавлена. Пример этого будет, если объект YYY вставлен в таблицу1, тогда вы можете просто сделать *** UPDATE table2 SET Status = "YES" WHERE SubjectName IN (SELECT SubjectName FROM table1 WHERE SubjectName = "YYY") ***. Или повторите обновление, если было добавлено более одного. – CodyMR

+0

@MochammadHelmi Также, если вы должны были сохранить его как хранимую процедуру, я считаю, что вы можете запускать обновление каждый раз, когда что-то вставляется. Просто создайте хранимая процедура, которая использует как вставку, так и обновление. Я не уверен на 100%, но я бы попробовал. – CodyMR

0

В вашем случае на изображениях в результате приведенные выше, то лучше использовать LEFT JOIN или RIGHT JOIN

Смотрите ниже пример:

> CREATE TABLE table1 (subject VARCHAR(10), value INT); 
> CREATE TABLE table2 (id INT, subject VARCHAR(10)); 

> INSERT INTO table1 VALUES ('XXX', 23),('ZZZ', 24); 
> INSERT INTO table2 VALUES (1, 'XXX'),(2, 'YYY'), (3, 'ZZZ'); 

> SELECT * FROM table1; 
+---------+-------+ 
| subject | value | 
+---------+-------+ 
| XXX  | 23 | 
| ZZZ  | 24 | 
+---------+-------+ 

> SELECT * FROM table2; 
+------+---------+ 
| id | subject | 
+------+---------+ 
| 1 | XXX  | 
| 2 | YYY  | 
| 3 | ZZZ  | 
+------+---------+ 
> SELECT a.*, IF(b.value IS NULL, 'No', 'Yes') as status FROM table2 as a LEFT JOIN table1 as b ON b.subject = a.subject; 
+------+---------+--------+ 
| id | subject | status | 
+------+---------+--------+ 
| 1 | XXX  | Yes | 
| 3 | ZZZ  | Yes | 
| 2 | YYY  | No  | 
+------+---------+--------+ 
+0

Спасибо за помощь, я хочу спросить, как у меня есть 2 разных запроса с таким количеством таблицы JOIN? и я думаю, что я не могу использовать предложение IF в запросе .. –

Смежные вопросы