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

13.08.2009 - В общем, Всякое

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

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

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

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

Итак, для создания алфавитного индекса, нам понадобятся данные. Будем делать на примере какой-либо группы людей с разными фамилиями, именами и тд. Создадим таблицу 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 в ссылке. Там можно разместить, к примеру, анкету человека или еще какие-то его данные.

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

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

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

Метки: ,

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

Александр

спасибо за помощь искал именно такую сортировку

Светлана

🙂 Отличный скрипт, спасибо!

Feodot

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

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

Что делать?

    Grey

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

      Feodot

      Да сейчас всё правельно, благодарю

Feodot

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

Feodot

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

Feodot

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

    Grey

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

      Feodot

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

        Grey

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

Олег

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

    Grey

    Узко мыслите — http://itklass.sch1636.edusite.ru/p86aa1.html

    Пример вывода несуществующих символов http://greyhouse.ru/pehepeinfo.php

    Выведено скриптом:

    < ?php for ($q=192; $q<224; $q++) { echo chr($q); } ?>

    Можно ссылку на другие сайты, откуда именно я накопировал решение?

Aidana

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

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

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