Как выбрать заголовки в базе данных mysql, которые начинаются с определенной буквы? - PullRequest
2 голосов
/ 23 февраля 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 23 февраля 2009
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 голосов
/ 23 февраля 2009

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

select * from movies where title like 'a%'
0 голосов
/ 23 февраля 2009

Будет выполнено требование «начинается с»:

ВЫБРАТЬ заголовок из таблицы, ГДЕ заголовок НРАВИТСЯ "D%"

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

0 голосов
/ 23 февраля 2009
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 гораздо более краткая - интересно посмотреть, как сравнивается производительность.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...