2014-04-11 66 views
0

我想篩選數據庫記錄,如果有重複的記錄我會將記錄標記爲deleted = 1。不幸的是,我無法正確更新我的記錄,我嘗試使用limit 1更新記錄,但我只更新了1條記錄,如果我沒有使用limit 1它將更新整個記錄。不正確的MySQL查詢更新

enter image description here

以上是我的數據庫表,我需要做的是,假設有一堆不同point_id記錄和過濾我只1。現在我想查詢按日期排序的記錄ASC,並將所有記錄更新爲期望最後記錄的deleted = 1

這是我的源代碼。我現在面臨的問題是它會更新所有記錄,如果我使用LIMIT 1它只會更新1條記錄。

while($total > 1){ 
    $total--; 
    $sql = sprintf("SELECT * 
     FROM customers_profiles_game_logs 
     WHERE point_id='$points_filter_row[point_id]' 
     AND customer_id='$sql_customer_row[customer_id]' 
     ORDER BY date_created ASC"); 
    $query = mysql_query($sql) or die(mysql_error()); 
    $row = mysql_fetch_array($query); 
    $num_rows = mysql_num_rows($query); 

    for ($i = 1; $i < $num_rows; $num_rows--) { 
     echo $sqli = sprintf("UPDATE customers_profiles_game_logs 
      SET deleted='1' 
      WHERE customer_id='$sql_customer_row[customer_id]' 
      AND point_id='$row[point_id]' LIMIT 1"); 
      mysql_query($sqli) or die(mysql_error()); 
    } 
} 
+0

你想更新所有行或一行 – jmail

+0

@jmail我想更新除最後一條記錄以外的所有行。 –

+0

檢查我的答案。用sql在這裏提琴 – jmail

回答

2

你可以有一個子查詢,它獲取要更新的記錄並將其與表本身連接起來,例如。

UPDATE customers_profiles_game_logs a 
     INNER JOIN 
     (
      SELECT customer_id, MIN(date) date 
      FROM customers_profiles_game_logs 
      WHERE customer_id = 1    -- <== ID HERE 
     ) b ON a.customer_id = b.customer_id 
       AND a.date = b.date 
SET  a.deleted = 1 

如果去掉子查詢裏面的WHERE條款,都爲每一位客戶的第一個記錄將被更新。

+1

它只更新1行,我需要的是它會更新所有行期望最後的記錄。 –

0

你需要這個:

UPDATE customers_profiles_game_logs a 
     INNER JOIN 
     (
      SELECT customer_id, MIN(date) date 
      FROM customers_profiles_game_logs 
      WHERE customer_id = 1    -- <== ID HERE 
     ) b ON a.customer_id = b.customer_id 
      SET  a.deleted = 1 

http://sqlfiddle.com/#!2/6c440/1

另一種風格:

UPDATE customers_profiles_game_logs a 
     INNER JOIN 
     (
      SELECT customer_id, MIN(date) date 
      FROM customers_profiles_game_logs 
     ) b ON a.customer_id = b.customer_id 
      SET  a.deleted = 1 

http://sqlfiddle.com/#!2/88e7c/1

+0

@Jijie Wai,查看我的回答... – jmail

+0

@Jijie Wai,你是否檢查我的答案。 – jmail

+0

是的,但這不是我所需要的。這裏是我的SQL'http://sqlfiddle.com/#!2/02866/1'我需要的是我想更新'point_id = 2',並且不更新最新日期意味着'log_id 19'我贏了不會更新。 –