2013-04-24 18 views
-1

当列值是字符串的一部分时,我需要在MySQL中查找。真的,我试图输入一个像“/ folder1/folder2 /”这样的文件夹路径,并在其所有父文件夹中更改一个值。mysql检查列值是否在字符串中

这是我这不工作:

UPDATE content_folders SET size = size+47654765 WHERE path% LIKE "/folder1/folder2/" 

因此,例如用“/资料夹/文件夹2 /”,我需要对任何行操作,其中列路径为“/”或“/ folder1”。

我也试过这个无济于事:

mysqli_query($mysqli,"UPDATE content_folders SET size = size+".filesize("content/$id")." WHERE concat(path,'%') LIKE '".$path."'") 
+1

你可以告诉你的数据库中,你要比较当前的路径值? – 2013-04-24 02:41:50

+1

我想'路径%LIKE“/ folder1/folder2 /”'是为了'路径LIKE“/ folder1/folder2 /%”' – hjpotter92 2013-04-24 02:43:58

+0

当然,请参阅编辑... – sableguy00 2013-04-24 02:44:10

回答

0

当使用LIKE操作,您可以使用通配符%在查询字符串部分,不作为字段名称的一部分。

所以

UPDATE content_folders SET size = size+47654765 WHERE path% LIKE "/folder1/folder2/" 

应该

UPDATE content_folders SET size = size+47654765 WHERE path LIKE "/folder1/folder2/%" 

编辑:

我误解了原来的问题。

UPDATE content_folders SET size = size+47654765 WHERE INSTR("/folder1/folder2/", path) = 1 AND path != "/folder1/folder2/"; 
+0

这将对所有子目录(较长路径)执行操作,而不是父目录(较短路径)。这就是为什么这是烦人的,我基本上需要一个典型的LIKE操作符的相反。像某种类型的子串运算符或其他东西。 – sableguy00 2013-04-24 02:45:09

+0

我很抱歉误读了原意。请看看编辑是否适合你。 – keelerm 2013-04-24 02:55:44

0

我懂了:

你可以像选择父目录。

UPDATE content_folders SET size = size+4674567 WHERE instr("/folder1/folder2/",path) 
+0

如果你有一个目录/ folder2 /,它也会被更新,所以这对父目录不起作用。如果您查看我之前发布的编辑,INSTR结果将与1进行比较以确保路径从头开始。 – keelerm 2013-04-24 03:19:15

相关问题