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

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

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

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

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

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


person Simon    schedule 21.01.2011    source источник


Ответы (2)


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

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;
person JYelton    schedule 21.01.2011
comment
Не будет ли 10 LEFT(title,1) = * довольно медленным? А как насчет названий, начинающихся с других символов? Спасибо :) - person Simon; 21.01.2011
comment
Вы имеете в виду выбрать определенные нечисловые и небуквенные символы? Если вы знаете, что у вас ограниченное количество символов, вы все равно можете использовать несколько операторов OR. В противном случае вы можете рассмотреть возможность использования REGEXP, если ваши пользователи не собираются очень часто просматривать результаты, начинающиеся с таких символов. Вам нужно будет протестировать запросы на скорость. - person JYelton; 21.01.2011
comment
Если подумать, операторы ИЛИ могут действительно работать. Спасибо, ценю это. - person Simon; 21.01.2011

Пока в «Заголовке» есть индекс, вы должны иметь возможность использовать SQL, например

select * 
from myTable 
where Title like 'A%'
(или «B%», «C%»...)

person John K.    schedule 21.01.2011
comment
Извините, я думал, что включил в тему, что уже делаю это для A-Z. Но проблема в том, чтобы получить 0-9 в одном запросе и все заголовки, которые не начинаются с A-Z0-9 в одном запросе. - person Simon; 21.01.2011