2011-11-26 54 views
1

我想清除特定的行值爲空,我有我想要使用的循環原型。但是,我擔心它會刪除表格中的所有內容。該數據庫有列:用戶,密碼,正確,錯誤,和game1,game2,game3 ..... game16。我想清除以遊戲開始的列,但沒有別的。這似乎很簡單,但我似乎無法使其工作。有人能幫助我理解嗎?我想清除數據庫中的特定行值,使用循環

$vals=array(); 
$sql="DELETE "; 
for ($i=1; $i<=16; ++$i) { 
    if (isset(game$i)) { continue; } 
    if ($i != 1) { 
    $sql .= ","; 
    } 
    $sql .= "game$i=:game$i"; 
    $vals[":game$i"]="game$i"; 
    "game$i FROM user WHERE user = * "; 
} 

$statement=$db->prepare($sql); 
$statement->execute($vals); 
+0

意味着你失去了一些東西接近:'「遊戲$ I ....' –

回答

1

的值設置爲NULLUPDATE ,並且不同於從數據庫中刪除記錄(DELETE

爲了防止必須動態創建SQL語句,我t看起來像你可以(也許應該)只寫出整個SQL腳本。

UPDATE u 
SET u.game1 = NULL 
    , u.game2 = NULL 
    , u.game3 = NULL 
    , u.game4 = NULL 
    , u.game5 = NULL 
    , u.game6 = NULL 
    , u.game7 = NULL 
    , u.game8 = NULL 
    , u.game9 = NULL 
    , u.game10 = NULL 
    , u.game11 = NULL 
    , u.game12 = NULL 
    , u.game13 = NULL 
    , u.game14 = NULL 
    , u.game15 = NULL 
    , u.game16 = NULL 
FROM user AS u 

FROM user AS u使得用於用戶的別名,所以可與單個字符u引用該表。當我指定UPDATE u(使用別名)時,您會看到發生這種情況。 W3Schools可能比我更願意解釋SQL別名。

如果你想UPDATE影響到所有用戶不需要(也不應該有)一個WHERE條款,這是由不具有WHERE

+0

@ CraigSmith我直到現在纔看到作業標籤...是否需要循環? –

+0

不,這不是要求,只是認爲它會起作用,然而我完全接受其他方式的做法 –

+0

I沒有澄清我在問題中,我想爲表格中的每個用戶都做這件事。它會工作,如果我只是使用你的代碼,並做了 「FROM user = *」 –

1

僅供參考,刪除=丟棄記錄

如果您希望設置列值設置爲NULL,你可以這樣做: -

UPDATE {$table} 
SET game{$i} = NULL, ...; // you don't even need a user = * 
+0

這很有道理,是否可以爲表中的每個用戶工作?因爲那就是我想要做的。 –

+0

是的,花了一些時間閱讀mysql文檔的更新語法會對你有好處 – ajreal

相關問題