gpt4 book ai didi

php - 如何在使用 PHP 和 MYSQL 的搜索中省略 "THE"

转载 作者:可可西里 更新时间:2023-11-01 07:29:25 25 4
gpt4 key购买 nike

我正在为一个项目做一个“ALPHABETICAL ORDER SEARCH”模块。

就是这样

A B C D E F 。 . . . . . . . . …… . . . . . …… . . Z

当我点击“A”时,结果应该按“A”排序。这对所有字母都是一样的。

现在我的概率如下:

  • 比如有一部电影叫《木乃伊》。

  • 我所做的是,当点击“ALPHABET T”时,相应的电影将被排序。

  • 但我的客户要求是“The Mummy”电影必须在用户点击“M”而不是“T”时排序

  • 因为“a, an, the”是“ARTICLES”,没有任何意义。

我希望现在每个人都能理解我的问题是什么....

任何帮助将不胜感激。

提前致谢

最佳答案

假设您不希望修改表的内容(因此查询效率稍低),以下应该可以解决问题。
(如果您确实有时间修改表格,请参阅本答案末尾的建议)

SELECT Title
FROM myTable
WHERE (Title LIKE 'x%' OR Title LIKE 'THE x%')
-- AND Title NOT LIKE 'THE [^T]%'
ORDER BY Title

注意事项:
- x 指定所需的字母(例如:LIKE 'A%' 等)
- 只有当“X”是字母“T”时才需要“AND TITLE NOT LIKE”额外条件(否则在功能上是多余的,但不会改变结果)
- 我不确定 [^xyz] 是否支持(即 NOT 字符 x、y 或 z),所以 [^T] 可以替换为它的正面等价物,比如 [A-RS-Z0-9]

还有一些其他停用词需要考虑(“A”、“AN”、“OF”...),但对于书籍或电影标题,通常只考虑“THE”。如果你必须处理其他文章,逻辑可以扩展为:

SELECT Title
FROM myTable
WHERE (Title LIKE 'x%'
OR Title LIKE 'THE x%'
OR Title LIKE 'A x%'
OR Title LIKE 'AN x%')
-- the following is only needed when "x" is either the letter T or A.
-- AND (Title NOT LIKE 'THE [^T]%'
-- AND Title NOT LIKE 'A [^A]%'
-- AND Title NOT LIKE 'AN [^A]%'
-- )
ORDER BY Title



有更好的解决方案,如果您可以修改表的内容。其中一些意味着预先计算一个或几个额外的列(并在添加新记录时维护它/这些列等)。

  • 例如,请参阅 Cletus 在这篇文章中对“sort_column”方法的回答,其中额外的列包含去除了任何不需要的前导干扰词的标题。除了用作 OP 首字母搜索问题中的过滤字段之外,此列还可以用于以更友好/明智的方式对由与首字母无关的过滤器生成的标题列表进行排序和/或标题的开头(比如按年份搜索)。
  • 上述方法的一种变体是仅存储“有效”的首字母(通过不需要的噪音的字母),从而形成较小的列,但通用性也较差。
  • 标题列本身可以更新,存储标题的修改形式,从而将无关的前导干扰词移动到字符串的末尾,在括号之间。这种做法在书目类型的目录中很常见。

关于php - 如何在使用 PHP 和 MYSQL 的搜索中省略 "THE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2414800/

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