mysql - 如何使用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,但语法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/,了解注入攻击在实践中的样子。查找“占位符”以了解如何做得更好。
至于更快的算法,您可能只需要索引。
推荐阅读
- r - Hoverinfo 文本在闪亮应用程序的绘图图中无法正常工作
- javascript - 调用不带 `.then()` 或 `await` 且不带 TypeScript 的异步函数的 Lint 警告
- css - 如何在 Sharepoint Online/Designer 上编辑“文档库预览器”Web 部件的 CSS?
- wordpress - 在 header.php 加载后加载文本
- python - 如何添加数据框一列的字符串并形成另一列,该列将具有原始列的增量值
- python - mongo db 日期保存为字符串,使用 RoboMongo 或 Python 的 PyMongo 转换为 ISO 日期
- ruby-on-rails - 如何在 Rails 中进行异步调用并在当前视图中显示结果?
- wordpress - 在wordpress上找不到页面
- javascript - Chrome 扩展 - 脉冲/发光扩展徽标
- java - 尝试在 Java 上运行 tesseract 项目