gpt4 book ai didi

php - MySQL 在多个列中搜索一个匹配项

转载 作者:行者123 更新时间:2023-11-29 02:01:46 25 4
gpt4 key购买 nike

我有一个搜索,通过多个表中的多个列来搜索匹配项。问题是我使用的是“OR”,但如果用户搜索多列,这将不起作用。

这是我的查询:

    SELECT clients.clientName,
projects.Client_ID,
projects.projectNumber,
projects.projectName,
projects.projectManager,
projects.expectedDate,
projects.address,
projects.CreationDate,
projects.custom1,
projects.custom2,
projects.custom3,
projects.custom4,
projects.custom5,
projects.custom6,
projects.custom7,
projects.custom8,
projects.custom9,
projects.Status_ID,
statuses.status
FROM projects
JOIN clients ON projects.Client_ID = clients.Client_ID
JOIN statuses ON projects.Status_ID = statuses.Status_ID
WHERE clientName LIKE '%$keyword%'
OR projectNumber LIKE '%$keyword%'
OR projectName LIKE '%$keyword%'
OR address LIKE '%$keyword%'
OR area LIKE '%$keyword%'
OR status LIKE '%$keyword%'
OR custom1 LIKE '%$keyword%'
OR custom2 LIKE '%$keyword%'
OR custom3 LIKE '%$keyword%'
OR custom4 LIKE '%$keyword%'
OR custom5 LIKE '%$keyword%'
OR custom6 LIKE '%$keyword%'
OR custom7 LIKE '%$keyword%'
OR custom8 LIKE '%$keyword%'
OR custom9 LIKE '%$keyword%';

如果用户搜索:状态和客户端——我的查询不会返回任何结果。

另外,我担心这个查询有很多数据的速度。

最佳答案

您是对的,您使用的查询类型将强制执行表扫描,并且无法对其编制索引。即使您只使用 LIKE '%$keyword%'

搜索单个列,这仍然是正确的

进行全文搜索的唯一有效方法是使用特殊的全文索引技术。 MySQL 内置了此功能,但目前仅适用于 MyISAM 表(MySQL 5.6 中的 InnoDB 将支持全文索引)。

您应该阅读我的演示文稿:Full Text Search Throwdown用于比较不同的解决方案。从我所做的测试中可以清楚地看出,使用 LIKE 的运行速度比使用任何类型的文本索引慢数百或数千倍。慢多少很大程度上取决于您的表的大小。


来自@Dagon 的回复:

我最初是在 2008 年做这个演示,但我在 2012 年 4 月更新了它并重新运行了所有测试。与我 2008 年的演示没有什么区别。

任何索引解决方案仍然比您使用 LIKE 获得的昂贵的表扫描好几个数量级。表越大,索引的好处就越大。这一原则不会改变。

关于php - MySQL 在多个列中搜索一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554160/

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