2013-04-24 50 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

相關問題