2010-09-01 66 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 ... 

同样效率不高,但它应该达到你所需要的某种程度。

相关问题