gpt4 book ai didi

mysql - 构造多参数 MySQL 搜索查询

转载 作者:可可西里 更新时间:2023-11-01 08:08:30 26 4
gpt4 key购买 nike

我正在尝试使用多个参数在 MySQL 中构造一个搜索查询,但我不太正确。

我从表单接收搜索参数,并使用它们动态构建我的查询。

这里是一些背景信息:

我有一个包含工作信息的 MySQL 数据库。我要搜索四列:

  1. 职位
  2. 工作类型
  3. 职位描述
  4. 工作地点

职位名称:这是职位发布的 1-5 个字的标题。它可以根据输入的方式而有所不同

工作类型:这是工作类型的三个字母代码。

职位描述:这是对工作和职责的简短描述

位置:这是一个城市或城镇

用户将使用搜索表单进行搜索。搜索表单由三部分组成。两个文本字段,“关键字”和“位置”;以及一个列出大约 20 种工作类型的下拉框。这将允许他们在职位列表的三个字母代码之间进行选择。

我想从表单的这三个部分获取信息,并使用它们来搜索我的数据库并返回最准确的记录。我已经尝试了多次迭代查询,它要么返回大量不相关的记录,要么返回的相关记录不够多。我也无法解释用户故意将部分表单留空的原因。

我当前的查询看起来像这样:

select * FROM my_jobs_tableWHERE category = 'User specified job type'OR job_title LIKE 'User specified Job keyword'OR job_description LIKE 'User specified Job keyword 'OR location LIKE "% User Specified Job Location%"

这对我不起作用。有什么建议吗?

最佳答案

各种“LIKE '%keyword%'”解决方案性能不佳。我建议你使用 FULLTEXT INDEX相反(前提是您的表使用 MyISAM 存储引擎)。

CREATE FULLTEXT INDEX jobsearch_idx ON my_jobs_table (job_title, job_description, location);

然后您可以使用 MATCH() 运算符进行搜索:

SELECT * FROM my_jobs_table
WHERE MATCH(job_title, job_description, location) AGAINST( ? );

在上面的“?”处替换用户指定的关键字。顺便说一句,我假设一个合理的设计是允许在标题或描述中出现位置关键字。因此,在您的应用程序中,将关键字与位置选择(空格分隔)连接起来,并将其用于查询参数。

我故意将 category 排除在该示例之外,因为我假设您希望类别名称完全匹配。所以用这样的 AND 运算符添加它:

SELECT * FROM my_jobs_table
WHERE category = ?
AND MATCH(job_title, job_description, location) AGAINST( ? );

将上面的两个“?”占位符替换为两个用户选择(类别和关键字)。使用查询参数,而不是变量插值。

MySQL 全文索引当然还有很多其他选项。例如,您可能想要使用搜索修饰符“IN BOOLEAN MODE”。我不会在这里完整描述它们,您应该阅读手册部分以了解更多信息。

MySQL 5.1 Reference Manual: Full-Text Search Functions .

至于处理用户将表单字段留空的情况,那是一个不同的问题,与搜索数据库分开。您应该在 Javascript 或应用程序代码中解决该问题,如果用户未提供默认值,则设置默认值,或者将他们返回到表单并告诉他们如果不为必填字段提供值就无法继续。

关于mysql - 构造多参数 MySQL 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com