2013-12-12 59 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