如何从以特定字母开头的mysql DB中选择标题?

时间:2009-02-22 23:41:58

标签: mysql

我需要按字母顺序列出电影片名,所以我只需要显示以所选字母开头的项目。为了使这更复杂,许多标题以“the”或“a”开头,需要忽略。

mysql查询如何实现这样的任务?

我可以简单地为每个标题添加一个带有搜索字母的额外列,因为它很容易用php,但我希望有一个更清晰的解决方案。

4 个答案:

答案 0 :(得分:4)

SET @letter = 'A';

SELECT  title
FROM    movies
WHERE   title REGEXP CONCAT('^(the |a )?', @letter);

但是,如果有title,则不会使用索引。

对于要使用的索引,您需要执行以下操作:

SET @letter = 'A';

SELECT  title
FROM    movies
WHERE   title LIKE CONCAT('the ', @letter, '%')
        OR title LIKE CONCAT('a ', @letter, '%')
        OR title LIKE CONCAT(@letter, '%')

答案 1 :(得分:0)

SELECT  * FROM blah WHERE TITLE LIKE 'a%';

SELECT * FROM blah WHERE SUBSTRING(TITLE, 1,1)='a';

或者,进一步说明,以涵盖忽视:

SELECT * FROM blah WHERE 
IF(SUBSTRING(TITLE, 1, 2)='a ',
  SUBSTRING(TITLE, 3, 1), 
  IF(SUBSTRING(TITLE, 1, 4) = 'the ', 
    SUBSTRING(title, 5, 1), SUBSTRING(TITLE, 1,1)
  )
)=='a';

在其他情况下,您应该能够使用相同的if块来获取数据。

编辑:信用到期 - Quassnoi的正则表达式选项更加简洁 - 有兴趣了解性能如何比较。

但是,使用专用字段可能会更好。

答案 2 :(得分:0)

这将处理“开始于”要求:

SELECT title FROM table WHERE title LIKE“D%”

要处理以“a”或“the”等开头的电影标题,可以调整这些标题输入数据库的方式。例如。 “电影,A”而不是“电影”

答案 3 :(得分:-1)

要仅选择以所选字母开头的标题,您可以执行类似

的操作
select * from movies where title like 'a%'