mysql喜欢在字符串上匹配完整的单词或单词的开头

给定一个搜索字符串,我需要选择每个记录(在执行搜索的字段中),至少有一个单词以给定文本开头.

例如:

'John Doe'

必须使用以下搜索字符串进行选择:

'joh'
'do'
'JOHN doe'

没有被选中

'ohn'
'oe'

我需要(可能)避免全文搜索.

我发现的工作是

$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
                                . 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'

我问是否有更好的方法来做到这一点.

(对于“更好的方式”,我的意思是更好的性能或相同的性能,但更优雅)

此外,由于查询将使用预准备语句构建,我应该如何在搜索字符串中使用LIKE元字符?

最佳答案 用这个:

$query = "SELECT * FROM MyTable WHERE searchfield LIKE CONCAT('%', ?, '%')";

您不需要OR条件 – 如果字段与search%匹配,它也将匹配%search%.

点赞