готовых решений куча, но как правило это плагины/модули для каких-либо движков
если пишется что-то свое, то общий алгоритм примерно такой:
0. получаем нужную букву, например так
1. не забываем про пагинацию, поэтому сразу же получаем нужную страницу, например так
2. приводим букву к нужному регистру, нужной кодировке, возможно еще чему-то нужному (например если это каталог фирм то есть смысл почекать на скобки, кавычки, символы вроде "ООО" и прочую лабуду)... с городами вроде как должно быть проще, но все равно не забываем о безопасности
3. определяемся как будем искать - либо по первой букве в названию (тогда в запросе будет LIKE), либо по отдельному полю, в котором будет прописана буква
второй вариант будет работать быстрее, но придется изменять добавление городов - т.е. при добавлении, к примеру "москва" в доп. поле придется дописать букву "м"
4. когда определились, делаем запрос
если выбрали первый вариант то примерно такой
Код:
SELECT blablabla FROM table WHERE city LIKE ' $letter%' LIMIT $page, 10
если выбрали второй вариант то примерно такой
Код:
SELECT blablabla FROM table WHERE cityletter ='$letter' LIMIT $page, 10
в примере
blablabla = нужная нам инфа
city = города
cityletter = поле с буквами
5. собсно и выводим наше blablabla
6, 7, 8 и так далее
по мере желания добавляем необходимые навороты - например делаем ЧПУ, кеширование для запросов/результатов, и т.д.