2012-01-30 32 views
0

是否有可能在sql語句中獲得匹配的字符串部分,其中有許多類似的語句。如何在SQL語句中獲得匹配的字符串部分與許多類似的檢查

SELECT fieldname 
FROM table 
WHERE content LIKE '%$val_1%' 
    OR content LIKE '%$val_2%' 
    OR content LIKE '%$val_3%' 
    . 
    . 
    . 
    OR content LIKE '%$val_n%' 

即我需要得到所有值($val_1, or(and) $val_2 ...),這在內容匹配。

例如

如果我的內容如下

content = 'this is my testing text' 

,我有以下值,以檢查在這樣的語句

$val_1 = 'thi'; 
$val_2 = 'esting'; 
$val_3 = 'other value, which not in my content'; 

我需要匹配partts ,即「thi」「esting」,因爲它們在我的內容中相匹配。

+1

我沒有得到你的問題.....你的查詢將運行,如果這是你要求 – Lamak 2012-01-30 20:44:54

+0

這聽起來像你想匹配模式val_ [0-9]?如果是這樣,請看看:http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - RLIKE可能是你之後的事情。 – dash 2012-01-30 20:47:09

+0

我需要獲取($ val_1,... $ val_n)中的一個值(或其中的一些值),這會導致我的查詢運行。即價值,這是我的內容。 – Simon 2012-01-30 20:47:40

回答

1
SELECT fieldname, matchpart = '$val_1' 
FROM table 
WHERE content LIKE '%$val_1%' 
UNION 
SELECT fieldname, matchpart = '$val_2' 
FROM table 
WHERE content LIKE '%$val_2%' 
... 
UNION 
SELECT fieldname, matchpart = '$val_n' 
FROM table 
WHERE content LIKE '%$val_n%' 
1

下面的查詢將最初從https://stackoverflow.com/a/2261001/961455返回列fieldnamecondX其中condX == 1 IFF content LIKE '%$val_X%',否則爲0。

SELECT fieldname, 
    `content` LIKE '%$val_1%' AS cond1, 
    `content` LIKE '%$val_2%' AS cond2, 
    ... , 
    `content` LIKE '%$val_n%' AS condn 
FROM table 
HAVING cond1 OR cond2 OR ... OR condn 
2

既然你說你做這在PHP中,只需使用PHP找出哪些位匹配後,你得到你的行:

if (stripos($row['content'], $val_1) !== false) this bit matched! 
if (stripos($row['content'], $val_2) !== false) this bit matched! 
if (stripos($row['content'], $val_3) !== false) this bit matched! 
+0

'stripos()'會更合適 – nachito 2012-01-30 21:14:35

+0

好點,謝謝! – Cal 2012-01-30 23:18:22