2013-12-12 137 views
4

我想使用LIKE函數選擇一條記錄。但是,如果中間存在字符,則不會顯示結果。我希望它選擇包含這些字符串的數據。例如:MySQL選擇數據分隔字符串

$value = "Mark Anthony"; 
$qry ="SELECT * FROM students WHERE name LIKE '%$value%'"; 

返回這些結果:

John Mark Anthony 
Mark Anthony Philipps 

,但我也希望有這樣的

Mark James Anthony 
Mark Gabriel Anthony Fernandez 
Marko Julian Anthonyo 

任何想法的結果嗎? 更新:'標記'必須在'安東尼'之前

回答

1

最後一次嘗試:

$value = "Mark Anthony"; 
$value = str_replace(" ","%",$value); 
$qry ="SELECT * FROM students WHERE name LIKE '%$value%'"; 

沒有測試!

+0

更新了我的問題。你認爲它也會包括這樣的結果嗎? Marko Julian Anthonyo? – Elmer

+0

jepp - 現在它應該工作 – niyou

+0

剛剛測試過它。沒有找到任何結果。 xD – Elmer

0

該proplem是,你說「帶來所有包含馬克安東尼的結果」,所以它的確如此。你應該把它像

$value = "Mark%Anthony"; 
+0

嗯。所以這項工作:$ value =「%Mark%Anthony%」;? – Elmer

6

我覺得全文工作

但全文搜索是支持MyISAM表只

SELECT * FROM students 
    WHERE MATCH (name) 
    AGAINST ('Mark Anthony' IN BOOLEAN MODE) 

更新: -隨着每個問題的更新OP需要也可以搜索Marko,那麼你可以得到像這樣: -

SELECT * FROM students 
WHERE 
(
    name LIKE '%Mark%' 
    OR name LIKE '%Anthony%' 
) 
+0

沒關係,我反正使用PHPmyadmin。會試試這個。 – Elmer

+0

是的嘗試一下,我認爲你的情況全文是最好的 – Roopendra

+0

更新我的問題。會出現這樣的結果嗎? Marko Julian Anthonyo – Elmer

2

您可以將值字符串分爲兩部分。像這樣:

WHERE name LIKE '%Mark%' AND name LIKE '%Anthony%' 
+0

你好,我沒有更新這個問題,但馬克必須在安東尼之前。根據你的建議,我認爲這將包括安東尼在馬克之前的結果。 :) – Elmer

+0

是的,這是我的查詢的可能性。 '%馬克%安東尼%'應該做的伎倆tho .. @埃爾默 – Jakob

+0

更新我的問題。會出現這樣的結果嗎? Marko Julian Anthonyo – Elmer

1

嘗試這種解決方案 -

SELECT * FROM table WHERE column REGEXP '(Mark).+(Anthony)'; 
+0

還沒有嘗試過,但想知道是否有解決方案,不會固定到馬克安東尼只:)如果我只是想尋找'標記'。 – Elmer

+0

你爲什麼不嘗試這個?正則表達式函數有時可以提供幫助。 – Devart