Php 如何避免使用常见的词语,如;";按select语句的字母顺序显示结果时

Php 如何避免使用常见的词语,如;";按select语句的字母顺序显示结果时,php,mysql,sql,select,Php,Mysql,Sql,Select,我现在在下面有一个select语句 $sql=“从电影中选择*片名,如“$letter%”按片名ASC排序” 每当有人访问view.php?letter=m时,它都会按字母顺序显示以该字母开头的所有电影,但如果有像“没有脸的男人”这样的电影,则会显示T而不是m,因为“The”这个词。我希望它忽略“the”这个词,所以它以M开头的电影显示,但当它以M开头的其他电影显示时,我仍然希望它以“the”开头显示 我是如何做到这一点的?您可以使用replace(): 也许更一般的答案是使用正则表达式: or

我现在在下面有一个select语句

$sql=“从电影中选择*片名,如“$letter%”按片名ASC排序”

每当有人访问view.php?letter=m时,它都会按字母顺序显示以该字母开头的所有电影,但如果有像“没有脸的男人”这样的电影,则会显示T而不是m,因为“The”这个词。我希望它忽略“the”这个词,所以它以M开头的电影显示,但当它以M开头的其他电影显示时,我仍然希望它以“the”开头显示

我是如何做到这一点的?

您可以使用
replace()

也许更一般的答案是使用正则表达式:

order by (case when lower(title) regexp '^(the |a |an ).*'
               then substr(title, instr(title, ' ') + 1)
               else title
          end) 

您仍然希望能够使用索引访问路径进行排序,因此最好的方法是创建一列
sort\u title
,其中包含规范化版本的
title
。每次更新记录时,也会相应地更新该派生列


理想情况下,您也可以使用
sort\u title
列进行筛选(这样就可以使用一个更紧凑的索引),但这可能有点棘手。

如果您的数据库支持派生列或函数索引,这将是一个很好的方案。@Thilo。我猜的是MySQL,但我可能错了。用你正在使用的数据库标记你的问题。这可能是解决这个问题最简单的方法。我几乎觉得自己没有想到这件事很愚蠢。谢谢
order by (case when lower(title) regexp '^(the |a |an ).*'
               then substr(title, instr(title, ' ') + 1)
               else title
          end)