2010-09-01 65 views
2

快速mysql php問題。mysql更新行如果存在

我有AA $row['sentence']和另一$row['rank']

我試着寫一個thing..that says..if你發現......在這些$row['sentence']某些詞..插入或任何更新$row['rank']我指定..

ex。這句話有壞字.. 所以rank row ..將變成1

ex2。這句話是乾淨 所以rank row將成爲5

thanks..if我困惑ü..tell..me我會嘗試另一種方式..

回答

0

試試這個:

UPDATE myTable SET rank = 1 WHERE sentence LIKE "%bad words%"; 
UPDATE myTable SET rank = 5 WHERE sentence NOT LIKE "%bad words%"; 

這顯然有點過分簡單化,甚至不是非常有效率 - 將所有內容設置爲排名會更快 - 然後改回你需要的。無論如何,我希望那是你以後的樣子。

+0

這隻有在您每次搜索一個單詞時纔有效。對於多個單詞,您將不得不運行「n + 1」查詢(一次將全部設置爲5,對每個錯誤單詞設置「n」)。再說一遍,你說這不是很有效。 – pferate 2010-09-01 00:22:43

+0

@pferate,何時有效? :) – 2010-09-01 00:37:41

+0

@pferate - 關於如何使用它的問題很不清楚。 – nickf 2010-09-02 22:53:30

1

您可以創建一個每個壞字作爲記錄的表,然後通過解析來創建更大的sql語句。這樣,您可以添加到壞詞的列表中,無論它們來自數據庫,而不必爲每個類似的子句手動輸入每個詞。

因此,例如:

$some_array = array(<list of bad words retrieved from db>); 

$query = "update mytable set rank = 1 where "; 

foreach ($some_array as $item) { 
    $query .= "sentence like '%$item%'and "; 
} 

//remove last "and" from end of $query string 
echo $query; 

因此,這將產生像nickf提供什麼,但與所有的不好的話一長列的SQL語句。

update mytable set rank = 1 where sentence like '%bad word%' and sentence like ... 

同樣效率不高,但它應該達到你所需要的某種程度。

相關問題