2009-02-22 2 views
2

Мне нужно сделать алфавитный список названий фильмов, поэтому мне нужно показать только те предметы, которые начинаются с выбранной буквы. Чтобы сделать это немного сложнее, многие названия начинаются с «или», которые нужно игнорировать.Как выбрать заголовки из базы данных mysql, которые начинаются с определенной буквы?

Как будет выглядеть запрос mysql для достижения такой задачи?

Я мог бы просто добавить дополнительную колонку с поисковым письмом, хранящимся для каждого заголовка, поскольку его довольно легко сделать с php, но Im надеется на более чистое решение, чем это.

ответ

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, '%') 
+0

По какой-то причине всегда возвращает 0 строк. – 2009-02-22 23:53:42

+0

Егор, ты заменяя @letter своим письмом, верно? – Sampson

+0

конечно. Но я получил его сейчас, нужно было сделать кавычки в нескольких местах. – 2009-02-23 00:05:40

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

или

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

Или, принимая его дальше, чтобы покрыть ignoreing:

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'; 

Вы должны быть в состоянии использовать тот же, если блоки для получения данных в других случаях также.

РЕДАКТИРОВАТЬ: Кредит, где его необходимо - опция регулярного выражения от Quassnoi намного более кратка - проявите интерес к тому, как производительность сравнивается.

Однако, это, вероятно, будет работать лучше с выделенным полем для этого.

+0

многие названия начинаются с «на» или «а», который должен быть проигнорирован. – bzlm

-1

Чтобы выбрать только заголовки, начинающиеся с выбранной буквы, вы можете сделать что-то вроде

select * from movies where title like 'a%' 
0

Это обрабатывающий «начинается с» требованием:

Выбор названия из таблицы, где название LIKE «D % "

Для обработки названий фильмов, начинающихся с« a »или« и т. Д. », Можно настроить способ их ввода в базу данных. например. «Фильм, А» вместо «фильм»

Смежные вопросы