gpt4 book ai didi

php - 去掉 WHERE 子句中的函数

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

我有一个名为 users 的表,其中包含列 firstnamelastname

我正在努力研究如何构造 WHERE 子句以返回匹配的名字、姓氏、名字加空格和姓氏以及姓氏加逗号和名字的结果。例如,“John”、“Doe”、“John Doe”和“Doe, John”。它也应该适用于部分补丁(即“John D”)。我正在考虑类似以下内容(用搜索短语替换 ?)。

SELECT * FROM people WHERE
firstname LIKE ?
OR CONCAT_WS(" ",firstname,lastname) LIKE ?
OR lastname LIKE ?
OR CONCAT_WS(", ",lastname,firstname) LIKE ?

这种方法有一个小缺陷,因为搜索“John Doe”也会返回“John Enders”、“John Flaggens”和“John Goodmen”,所以我需要添加一些条件来返回结果当给出名字和姓氏时两者都匹配。

这种方法也有一个很大的缺陷,因为我的 WHERE 子句中有函数阻止使用索引并导致性能显着降低。

我是否可以仅使用 SQL 而无需在 WHERE 子句中使用函数来有效地执行此操作,或者我是否应该使用服务器代码(即 PHP)来解析给定的空格和逗号搜索短语并根据结果创建动态 SQL 查询?

最佳答案

你问是否可以在 MySQL 中高效执行此操作,考虑到你的模式设计而不使用 FULLTEXT搜索简单的答案是否定的,你不能有效地做到这一点。

您可以使用 LIKE / STRCMP 创建一些古怪的查询和/或 string functions .如果您采用这种方法,最好编写一些应用程序逻辑来创建内联查询,而不是尝试编写一个可以处理所有问题的查询。无论哪种方式,它都不太可能真正有效

MySQL 5.6 有能力执行 FULLTEXT在 INNODB 中搜索。如果您使用的是较低版本,则只能对 MyISAM 表执行此操作——MyISAM 可能不是一个好主意的原因有很多。

另一种方法是查看真实的搜索解决方案,例如 Lucene , SphinxXapian

关于php - 去掉 WHERE 子句中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178270/

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