我需要按字母顺序列出电影片名,所以我只需要显示以所选字母开头的项目。为了使这更复杂,许多标题以“the”或“a”开头,需要忽略。
mysql查询如何实现这样的任务?
我可以简单地为每个标题添加一个带有搜索字母的额外列,因为它很容易用php,但我希望有一个更清晰的解决方案。
答案 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%'