В общем Всякое

PHP + MySQL : Создание алфавитного индекса для выборки данных по алфавиту

Алфавитный индекс — это способ организации данных, когда мы видим на экране весь алфавит и можем, нажимая на буквы, получать на экран наименования, которые на эту букву начинаются. Алфавитный индекс просто ОБЯЗАН присутствовать во всех приложениях с большими объемами структурированных данных — в библиотеках, каталогах, справочниках. На мой взгляд, данный способ организации информации в некоторых случаях намного удобнее чем простая форма поиска. А в сочетании с таковой, представляет из себя просто идеальный инструмент для оперирования данными.

Должно получиться примерно так:

Алфавитный индекс
Алфавитный индекс

Итак, для создания алфавитного индекса, нам понадобятся данные. Будем делать на примере какой-либо группы людей с разными фамилиями, именами и тд. Создадим таблицу people, в которой будет содержаться информация о людях, а именно — их фамилия, имя и отчество:

CREATE TABLE people (
id int(11) NOT NULL auto_increment,
imya varchar(40) collate utf8_unicode_ci default NULL,
otchest varchar(40) collate utf8_unicode_ci default NULL,
familia varchar(40) collate utf8_unicode_ci default NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=30 ;


— Дамп данных таблицы people

INSERT INTO people VALUES (24, ‘Мария’, ‘Степановна’, ‘Григорьева’);
INSERT INTO people VALUES (23, ‘Антон’, ‘Григорьевич’, ‘Миронов’);
INSERT INTO people VALUES (22, ‘Алексей’, ‘Петорвич’, ‘Васильев’);
INSERT INTO people VALUES (21, ‘Максим’, ‘Сергеевич’, ‘Иванов’);
INSERT INTO people VALUES (20, ‘Денис’, ‘Валерьевич’, ‘Серов’);
INSERT INTO people VALUES (25, ‘Михаил’, ‘Михайлович’, ‘Мишин’);
INSERT INTO people VALUES (26, ‘Николай’, ‘Степанович’, ‘Зигмундович’);
INSERT INTO people VALUES (27, ‘Антон’, ‘Павлович’, ‘Чехов’);
INSERT INTO people VALUES (29, ‘Владимир’, ‘Владимирович’, ‘Антонов’);

Для минимального кода и для удобства, будем исходить из функции chr(), описание которой можно прочитать здесь


Здесь в результате мы получаем ФИО человека, которые являются ссылками на файл human.php с передачей значения id в ссылке. Там можно разместить, к примеру, анкету человека или еще какие-то его данные.

Алфавитный индекс - выборка по букве "М"
Алфавитный индекс - выборка по букве "М"

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

14 Responses

  1. У меня сайт ругаеться на строку — for ($q=192; $q<224; $q++) {

    Parse error: syntax error, unexpected ‘;’, expecting ‘)’ in Z:homeimedicina1234.ruwwwcollection.php on line 5

    Что делать?

    1. Прошу прощения. Вы, видимо, просто скопировали код, а у меня плагин подсветки синтаксиса передал в другой кодировке.
      Сейчас я плагин отключил, как видите, символы < и некоторые кавычки были заменил на код. Сейчас код вроде бы чистый, пробуйте

  2. ПОсле того как я вставил в свой код єти стрчки
    for ($q=192; $q<224; $q++) {
    echo "«.chr($q).»«; //перебираем и выводим все символы русского алфавита, одновременно делая их сслыками на скрипт с передачей самого символа в качестве параметра
    }
    echo ‘Все‘; //добавляем в конец индекса «Все» — чтобы выбрать все
    выводит вот, что
    ????????????????????????????????Все
    почему то кадировка ругаеться

  3. Ну ладно..кодировка дело такое, главное вы донесли саму идею, спасибо тебе)

  4. Слушай, а как можно отсортировать всю выборку по алфавиту..и притом, что бы вначале шли все названия который начинуються с цифр, а потом только буквенные(по алфавиту)???

    1. В данном примере по нажатию кнопки «Все» выводятся все записи, по алфавиту, отсортированные в порядке возрастания. Если есть данные в поле «familia» в базе, они будут выводиться также, по логике, первыми. Сейчас открыл старые запасы, добавил в базу фамилии из цифр — да, все работает.

      1. ясно..и ещё такой вопрос, у меня как я говорил русские буквы из chr выводятся вот так
        ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
        но я думал дело в локальном сервере, но вот перетащил всё на хостинг, и всё так же выводиться
        ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
        что делать?

        1. тут надо смотреть, конечно, кодировки. Для начала убедиться, что в базу занесены не эти вопросы, а нормальные значения. Если нам нормальные, то смотреть в файлы вывода, чтобы сам файл php был закодирован в нужную кодировку. Вообще можно ссылку на проект? Проще подсказать что да как, когда оно перед глазами 🙂

  5. chr() преобразует код ASII в буквы. А где ты видел в ASII русские символы?))
    Прежде чем копировать примеры с других сайтов, хоть изучите их перед этим

  6. Я все сделала по вашему примеру…но когда я нажимаю на букву у меня нечего не выводит….можете помочь определить в чем проблема ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *