在mysql中搜索'SanF'时获取旧金山的记录

时间:2015-10-23 06:47:15

标签: php mysql

在搜索“SanF”时获取“旧金山”记录;

SELECT * FROM table WHERE col LIKE '%san%'; Works
SELECT * FROM table WHERE col LIKE '%san F%'; Works
SELECT * FROM table WHERE col LIKE %sanF%'; Not Working

3 个答案:

答案 0 :(得分:7)

我担心?- add_grade([], name_grade(jim, 95), T1), | add_grade(T1, name_grade(tom, 90), T2), | get_grade(T2, tom, Grade). T1 = tree(name_grade(jim, 95), [], []) T2 = tree(name_grade(jim, 95), [], tree(name_grade(tom, 90), [], [])) Grade = 90 ; false. ?- add_grade([], name_grade(tom, 90), T1), | add_grade(T1, name_grade(tom, 85), T2), | get_grade(T2, tom, Grade). T1 = tree(name_grade(tom, 90), [], []) T2 = tree(name_grade(tom, 85), [], []) Grade = 85 ; false. ?- add_grade([], name_grade(tom, 90), T1), | add_grade(T1, name_grade(bill, 85), T2), | get_grade(T2, ann, G). false. 运算符不是进行基于文本搜索的查询的灵丹妙药。如果您确实希望将LIKE的用户输入与包含sanF的记录相匹配,则必须从列中删除空格,然后进行比较。

San Francisco

您还可以考虑在应用程序端对用户输入进行一些按摩,以便原始的两个SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%'; 条件(LIKE'%san%')涵盖每个案例。

答案 1 :(得分:0)

SELECT * FROM table WHERE col LIKE '%sanF%'; will never work for 'San Francisco'  
SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%';

正确使用。 但REPLACE函数可能会变慢,您可以看到大型数据集的性能问题,即使查询成本很高。 人们通过在列上应用索引或尝试使用San F%%Francisco来对其进行优化。 我们所做的是,而不是在侧面使用like,我们只是在单面上执行。

答案 2 :(得分:-2)

在你的php中,你可以用_%替换所有空格。 或者您可以在查询中执行此操作:

SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '%'), '%')
SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '_'), '%')

希望这有帮助!