Соответствие первого символа в строке цифре или нестандартному символу

0

Мне нужно разрешить пользователям просматривать таблицу s > 1 миллионом записей первой буквой в заголовке.

Я хочу, чтобы они могли просматривать каждую букву из A-Z, 0-9 в списке вместе и все остальные символы вместе.

Поскольку это большая база данных и она должна отображаться на веб-сайте, мне нужно, чтобы она была эффективной. Regex не использует индекс, поэтому он будет слишком медленным.

Возможно ли это, или мне придется переосмыслить дизайн?

Заранее спасибо

Теги:
database

2 ответа

0
Лучший ответ

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

SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC;

Рассмотрите возможность разбивки этих страниц результатов на соответствующие фрагменты. MySQL позволит вам сделать это с помощью LIMIT

Эта команда выберет первые 100 записей из нужной группы символов:

SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 0, 100;

Эта команда будет выбирать следующие 100 записей из требуемой группы символов:

SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 100, 100;

В ваших комментариях, если вы хотите комбинировать символы 0-9 без использования регулярных выражений, вам нужно будет объединить несколько операторов OR:

SELECT title FROM table
WHERE (
    LEFT(title,1) = '0'
    OR LEFT(title,1) = '1'
    ...
    )
ORDER BY title ASC;
  • 0
    Разве 10 левых (title, 1) = "*" будут довольно медленными? А как насчет заголовков, начинающихся с других символов? Спасибо :)
  • 0
    Вы имеете в виду выбрать конкретные нечисловые и не-буквенные символы? Если вы знаете, что у вас ограниченное количество символов, вы все равно можете использовать несколько операторов OR . В противном случае вы можете рассмотреть возможность использования REGEXP если ваши пользователи не будут часто просматривать результаты, начиная с таких символов. Вам придется проверить запросы на скорость.
Показать ещё 1 комментарий
1

Пока существует индекс в "Title", вы должны иметь возможность использовать SQL как


select * 
from myTable 
where Title like 'A%'
(или "B%", "C%"...)
  • 0
    Извините, я думал, что включил в тему, что я уже делаю это для AZ. Но проблема состоит в том, чтобы получить 0-9 в одном запросе и все заголовки, которые не начинаются с A-Z0-9 в одном запросе.
Сообщество Overcoder
Наверх
Меню