作者Boston (Boston)
看板PHP
標題[請益] 防止資料重複寫入資料庫內
時間Sat Jul 21 23:58:18 2012
是這樣的
由於每次跑php都跑很久(或許是寫入的迴圈跑太多)
所以必須把資料防止重複寫進資料庫內
於是我寫了以下程式碼:
foreach($_SESSION['statuses']['data'] as $s)
{
$status_id=$s['id'];
/*開始判斷是否有重複資料*/
$sql = "SELECT * FROM `status`where `status_id`='$status_id'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
if($row[status_id]!=$status_id) 開始判斷
{
$user_id=$s['from']['id'];
$status_message=$s['message'];
$status_updated_time=substr($s['updated_time'],0,19);
$status_likes_numbers=count($s['likes']['data']);
.
.
.
.
.
}
}
/*結束判斷是否有重複資料*/
if($dbin)
{
echo "status資料已寫入";
}
else
{
echo "status寫入失敗";
}
}
大概是這樣的防止重複資料寫入
我是利用session的值跟sql主鍵的值判斷後,來決定資料是否要寫入
但是這方法寫好後,php網頁還是跑很慢
於是就在想能不能把判斷寫在迴圈外?
這樣的話就不用一直跑回圈判斷是否寫入,並且加速php讀取速度?
以及可以寫在迴圈外判斷是否寫入的話,該如何撰寫程式碼呢?
php新手,請版友們多指教
ps.user單一資料量預估至少上百筆
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.254.179.115
→ arrack:紅色地方的邏輯好像怪怪的 07/22 00:30
→ arrack:你應該降低SQL讀取的數量... 07/22 00:31
邏輯的地方是 判斷資料庫主鍵與SESSION是否一致
不知道邏輯有沒有寫錯...
降低SQL讀取數量,我會往這方面去想,謝謝
※ 編輯: Boston 來自: 111.254.179.115 (07/22 00:33)
→ guardlan:DB欄位設定唯一值然後利用insert on duplicate update 07/22 00:42
GOOGLE後發現on duplicate update這方法好像適用在MYSQL
但我是用MSSQL >_<
→ cleanwind:樓上的方法也可以試試看,或許更好! 07/22 00:44
推 cleanwind:你的 func 是 mysql 的耶 ... 07/22 00:51
看到了...呃 我太迷糊了
之前都在玩MYSQL平台
現在資料是寫在MSSQL內(沒想到居然沒錯誤!?)
※ 編輯: Boston 來自: 111.254.179.115 (07/22 00:56)
→ arrack:SQL 已經判斷一次了 只要判斷有沒有資料就好了 07/22 12:28