2011-09-27 84 views
0

是否有PHP代碼讓您比較兩個MySQL表格,並讓您將缺失的條目添加到一箇中?PHP - 比較兩個MySQL表格

我有兩個表。 hs_hr_employee和權利。我想從hs_hr_employee表中的某些列添加數據,以便它們在權限表中保持一致。

hs_hr_employee有多行,而權限表有5行。權利表會從4列從hs_hr_employee表,emp_number,EMPLOYEE_ID,emp_firstname的信息,emp_lastname

下面是代碼:

<?php 

$connection = mysql_connect('localhost','admin','root'); 

if(isset($_POST['submit'])) 
{ 
    if(isset($_POST['cb_change']) && is_array($_POST['cb_change'])) 
    { 
     foreach($_POST['cb_change'] as $emp_number => $permission) 
     { 
      $sql = "UPDATE `rights` SET Permission='".mysql_real_escape_string($permission)."' WHERE emp_number='".mysql_real_escape_string($emp_number)."'"; 
      echo __LINE__.": sql: {$sql}\n"; 
      mysql_query($sql); 
     } 
    } 
} 
?> 
<p style="text-align: center;"> 
    <span style="font-size:36px;"><strong><span style="font-family: trebuchet ms,helvetica,sans-serif;"><span style="color: rgb(0, 128, 128);">File Database - Administration Panel</span></span></strong></span></p> 
<p style="text-align: center;"> 
    &nbsp;</p> 

<head> 
<style type="text/css"> 
table, td, th 
{ 
border:1px solid #666; 
font-style:Calibri; 
} 
th 
{ 
background-color:#666; 
color:white; 
font-style:Calibri; 
} 
</style> 
</head> 

    <form method="post" action="admin.php"> 

    <?php 


     if (!$connection) 
      { 
      die('Could not connect: ' . mysql_error()); 
      } 

     mysql_select_db('users', $connection); 

     //mysql_query('INSERT into rights(Emp_num, ID, Name, Surname) SELECT emp_number, employee_id, emp_firstname, emp_lastname FROM hs_hr_employee'); 


     $result = mysql_query("SELECT emp_number, employee_id, emp_firstname, emp_lastname, Permissions FROM rights"); 

     mysql_query("INSERT INTO rights (emp_number, employee_id, emp_firstname, emp_lastname) 
        SELECT emp_number, employee_id, emp_firstname, emp_lastname 
        FROM hs_hr_employee 
        ON DUPLICATE KEY UPDATE employee_id = VALUES(employee_id), emp_number = VALUES(emp_number) 
        "); 

     echo "<center>"; 

     echo "<table > 
     <tr> 
     <th>Employee Number</th> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Surname</th> 
     <th>Permissions</th> 
     <th>Change</th> 
     </tr>"; 

     while($row = mysql_fetch_array($result)) 
      { 
      echo "<tr>"; 
      echo "<td>" . $row['emp_number'] . "</td>"; 
      echo "<td>" . $row['employee_id'] . "</td>"; 
      echo "<td>" . $row['emp_firstname'] . "</td>"; 
      echo "<td>" . $row['emp_lastname'] . "</td>"; 
      echo "<td>" . $row['Permissions'] . "</td>"; 
      echo "<td> <select name='cb_change[]'><option value='all'>All</option> <option value='remote'>Remote Gaming</option> <option value='landbased'>Landbased Gaming</option> <option value='general'>General Gaming</option> </select> </td>"; 
      echo "</tr>" ; 
      } 


      #echo "<td>" . $row['Change'] . "</td>"; 


      echo "</table>"; 

      echo "</center>"; 


     #$_POST['cb_permissions']; 


    mysql_close($connection); 


    ?> 

<p style="text-align: center;"> 
    &nbsp;</p> 
<p style="text-align: center;"> 
    &nbsp;</p> 

<p style="text-align: right;"> 
    <input name="Save_Btn" type="button" value="Save" /> 


    </p> 


</form> 

任何想法,該怎麼辦呢?

感謝, 布賴恩

+0

這個問題有沒有關係'php' – zerkms

+0

那麼它通過PHP的MySQL – Brian

+0

它是英特爾CPU上的MySQL通過PHP - 所以添加英特爾標籤,然後 – zerkms

回答

3

我會去與INSERT INTO SELECT這裏。

假設你承認的社會安全號碼(SSN)的僱員,並使用這個值來更新,例如,姓名和birthyear:

mysql_query(" 
INSERT INTO hs_hr_employee (ssn, name, birthyear) 
SELECT ssn, name, birthyear 
FROM hs_hr_rights 
ON DUPLICATE KEY UPDATE name = VALUES(name), birthyear = VALUES(birthyear) 
"); 

您還可以在添加WHEREFROM之間ON DUPLICATE。像這樣:

... 
FROM hs_hr_rights 
WHERE birthyear IS NULL 
ON DUPLICATE KEY UPDATE name = VALUES(name), birthyear = VALUES(birthyear) 
... 

雖然,我沒有看到複製值,因爲在大多數情況下,你可以通過JOIN小號接他們的需要。

+0

我試過的是這樣的,但它似乎不工作:'mysql_query('SELECT emp_number,employee_id,emp_firstname,emp_lastname FROM hs_hr_employee \t \t \t \t \t WHERE hs_hr_employee.ID \t \t \t \t \t NOT IN( \t \t \t \t \t SELECT rights.ID \t \t \t \t \t FROM權利 \t \t \t \t \t WHERE hs_hr_employee.ID =權限。 ID \t \t \t \t \t)');' – Brian

+0

我現在試過了,但它沒有更新值,權利表仍然是空的 – Brian

+0

您確定要替換正確的列和表名嗎? –

2
select * from table a where a.common not in (select b.common from table b where a.common = b.common) 

而在PHP中運行這個問題,以及

select * from table b where b.common not in (select a.common from table a where a.common = b.common) 

不可能的,但在MySQL其ANS如上

+0

所以它不會與一個PHP的mysql_query工作? – Brian

+0

mysql_query()用於從PHP中獲取ny sql查詢 – user909058