急~~PHP怎麼寫一個判斷是否知道MYSQL內有重複資料

qwer556617

初級會員
已加入
1/14/15
訊息
2
互動分數
0
點數
0
年齡
31
各位大大好^^小弟是一個程試初學者,請各位大大不另解答,我已經參考過很多網頁資料了,可是就毫無頭緒
每60秒會自動匯入資料庫,但是這程試卻無法自動偵測,資料是否有重複,只會無限的每60秒匯資料進去資料庫,但不具有辨識是否資料有重複,總共設定6個欄位,而這些資料只有2個資料欄位,不會做成是判斷到欄位,其餘的4個欄位只要被判斷到與MYSQL內資料有不同,就會進行覆寫。
簡單整理第一、
自動偵測MYSQL是否有重覆資料,沒有就自動寫入MYSQL資料庫
第二點判斷欄位資料是否有作修改,有的話進行覆寫到資料庫裡面
PS: CS_NO、IN_TIME這兩個數據欄位就算資料修改也不會做覆寫,
KIND、CODE、CS_PLACE、DEPTNAME 這四個欄位有做修改數據的動作就會自動偵測並覆寫進去MYSQL資料庫裏面

if ($rowcount>0)
{
$selconn = $connsql;
$impcount = 0;

if (!$conn = mysql_pconnect('127.0.0.1', 'cn00', 'cn00'))//連結備份資料庫(本地端為127.0.0.1),帳號:'',密碼:''
{
echo "<font color='red'>[MySQL] Cannot connect server test .<br></font>\n";
}
elseif (!mysql_select_db('dest', $conn)) //與指定資料庫連線
{
mysql_close($conn);
echo "<font color='red'> Cannot connect to target table </font>\n";
}
else
{
$cnt = 0;
mysql_query("SET NAMES 'BIG5'");
//insert data
for($cnt = 0; $cnt < $rowcount; $cnt++)
{

//141行新增檢查功能開始
$v1 = $my_csNo[$cnt];
$v2 = $my_Kind[$cnt];
$v3 = $my_code[$cnt];
$v4 = $my_inTime[$cnt];
$v5 = $my_csPlace[$cnt];
$v6 = $my_deptName[$cnt];
$query = "INSERT INTO cs (CS_NO,KIND,CODE,IN_TIME,CS_PLACE,DEPTNAME) VALUES ('$v1','$v2','$v3','$v4','$v5','$v6')"; //trim(stripslashes($sql[1])); //20110524,fix duke,stripslashes()會造成錯誤所以不用

try
{
//檢查152行資料是否有重複程式碼在這行一定要下完
$rs = mysql_query($query, $conn);
//$RecordsAffected = mssql_rows_affected($conn);

if (!$rs)
{
echo "<font color='red'>案號:" . $query . " 匯入失敗! </font>\n";
}
elseif (!is_resource($rs))
{
//echo "Affected-rows=$RecordsAffected<br>\n";
$impcount++;
echo "案號:" . $query . " 匯入成功.<br>\n";
}
else
{
//query: 這用不到,也執行不到
echo "<table border=1 cellspacing=1 style='font-size=10pt;'>\n";
//fields name
echo "<tr>\n";
while ($obj = mysql_fetch_field($rs)) echo "<th>" . $obj->name . "</th>\n";
echo "</tr>\n";
//fields value
$rowcount = 0;
while ($row = mssql_fetch_row($rs))
{
$rowcount++;
echo "<tr>\n";
for ($i = 0; $i < count($row); $i++)
{
if (is_null($row[$i]))
echo "<td>(null)</td>\n";
else
echo "<td>" . trim($row[$i]) . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n" . "count=$rowcount,Affected-rows=$RecordsAffected<br><hr>\n";
mssql_free_result($rs);
}
}
catch(Exception $ex)
{
echo "<font color='red'>" . $ex->errorMessage() . "</font><br><hr>\n";
}
}//end for
mysql_close($conn);
}
} //end if

if ($rowcount>0) echo "<br>[" . date("Y/m/d H:i:s", time()) . "] 匯入 成功 $impcount 筆, 失敗 " . ($rowcount - $impcount) . " 筆.<br>\n";
?>

</body>

</html>
 

allen528

一般般會員
已加入
6/20/10
訊息
96
互動分數
0
點數
6
看不太懂你的描述。
這問題跟是不是用 php 沒關,重點是 mysql table 要怎麼設計。
有沒有重覆可以讓 mysql 自己判斷(設定 uniq index),不需要煩勞程式。

"L1,L2 這兩個數據欄位就算資料修改也不會做覆寫"
問題是
1. 何謂覆寫?
2. 如果 L1,L2,L3,L4.. 都被修改了,那麼到底要不要覆寫?

你的問題最好要描述夠清楚,並且提供"測試數據"讓大家知道什麼數據會有什麼反應。
 

qwer556617

初級會員
已加入
1/14/15
訊息
2
互動分數
0
點數
0
年齡
31
樓上大大您好
L1、L2有兩個欄位不會被判斷到,只有、L3、L4、L5、L6欄位數據判斷有做修改
就會自動把L3、L4、L5、L6欄位資料匯進MYSQL修改,修改、L3、L4、L5、L6MYSQL裡資料欄位資料。
那如果用MYSQL自動判斷該怎麼做
 
最後編輯:

cyberlar

一般般會員
已加入
7/9/10
訊息
54
互動分數
0
點數
6
以下是一個大概

$in_data_1
$in_data_2
$in_data_3
$in_data_4

以上變數內假設已經有值了

$check_sql = "select count(*) from some_table where data1='$in_data_1' and data2='$in_data_2' and data3='$in_data3' and data4='$in_data4' ";
$check_rs = mysql_query($check_sql);
$check = mysql_fetch_array($check_rs);

if($check[0]['count'] == 0){
//這邊開始塞資料
}else{
//資料已經在表中
}
 

cyberlar

一般般會員
已加入
7/9/10
訊息
54
互動分數
0
點數
6
以資料庫做的話....
以下也是一個大概, 因為我是用 PostgreSQL,
MySQL 效能低下又不穩, 就都沒有用...
用這個語法可以設定讓資料表不吃重複性資料

create unique index table_name_unq_idx on table_name(column1, column2, column3);

這樣子的話, 只要進來的資料, column1, column2, column3 三個是重複的話, 資料庫不吃
 
▌延伸閱讀