首页 > 解决方案 > 如何使用sql更精确地搜索用户?

问题描述

我有一个搜索用户及其用户名的 SQL 语句。这是代码:

SELECT * 
FROM user_info 
WHERE username,name LIKE '$search%' and id!='$myId' OR MATCH (name,username) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AND id!='$myId' 
LIMIT 10

这里有什么问题?谁能建议我一个更好更快的算法来搜索人?

标签: mysql

解决方案


我这里没有要测试的 MySQL,但语法foo,bar like '...'看起来不正确。这可能需要分解并变成 OR。

之后, in SQLOR的优先级低于AND. 所以A OR B AND C实际上的意思A OR (B AND C)。因此,您的 id 条件并没有达到您可能想要的效果。添加括号。

下一个值得怀疑的事情是您如何将搜索和 ID 粘贴到 SQL 中。只需将内容粘贴到字符串中,就会面临 SQL 注入攻击,这是一个常见的安全问题。请参阅https://xkcd.com/327/,了解注入攻击在实践中的样子。查找“占位符”以了解如何做得更好。

至于更快的算法,您可能只需要索引。


推荐阅读