![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| KonstRuctor |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Написал тут скрипт -- вывод сотрудников компании в определенном порядке.
Дело в том, что сортировать по фамилии - не катит, так как директор Якушев должен быть выведен раньше, чем сантехник Аваров. Сортировать по id не катит, так как замдир Щеглов может быть добавлен позднее, но должен быть выведен выше сантехника. Решил задачу введением понятия рейтинг сотрудника. Посмотрите, мне кажется, что вышло очень громоздко и неуклюже. Может, я что-то сделал не так. Итак, есть таблица с сотрудниками:
Программа вывода перечня сотрудников на экран:
Когда нажимаем кнопку edit, программа выводит простую форму, в которой можно изменить все параметры, в том числе rating. Ниже формы выводит снова табличку с перечнем, чтобы ориентироваться.
Если ввести новый рейтинг, идет такая обработка:
У меня нарушается нумерация рейтингов, точнее нарушается стройность ряда рейтингов. Другими словами, если сотруднику Иванову присвоить рейтинг 1, то все рейтинги всех сотрудников, кто был ниже него, увеличатся на 1, хотя это не нужно. Программа все равно работает, но теоретически это ошибка -- при изменении рейтинга 10000000 раз у меня все рухнет. У кого какие мысли? Спасибо. |
||||||||
|
|||||||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Я бы сделал по другому. Убрал рейтинг у сотрудников, а добавил таблицу с группами. С полями id_group | name | porydok_otobrageniy. И пользователей раскидывал по группам. Вывод осуществлял с сортировкой по группам и фамилиям внутри группы.
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
во-первых, зачем тебе LIMIT 1 в
во-вторых, ты выведи $newrating = intval ( $_POST["newrating"] ); там точно не ноль/empty? |
|||
|
||||
| Djinn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 250 Регистрация: 18.5.2007 Репутация: 1 Всего: 1 |
Полностью согласен, это будет намного лучше ! |
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Спасибо!
1) to skyboy: я проверяю $newrating на 0/empty, просто этот кусок кода я опустил, видимо зря.. :-/ 2) немного не понял с таблицей про группы. Скорее всего, такая таблица будет иметь смысл в большой компании... хотя я пишу универсальный скрипт. Надо будет подумать. Внутри одной группы может оказаться Якушев, который должен быть выше Абрамова. Как тогда быть? 3) Мой вопрос в основном сводился к тому, что я не смог ряд чисел rating сделать непрерывным. То есть первым всегда должен быть номер 1, за ним 2 и так далее, до N - кол-ва строк. |
|||
|
||||
| skyboy |
|
||||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
правильно. так ведь сортировать можно не по одному полю, а по нескольким. таблица "сотрудники":
таблица "группы":
orderID намеренно сделал неуникальным - мы сможем менять значения orderID для двух групп местами, только если неуникальный этот номер. Запрос вернет людей с сортировкой по порядку отображения для группы, при одинаковом указанном порядке отсортироует по названию должности, и для одинаковых должностей отсортирует по фамилии.
LEFT JOIN использую, чтоб не упустить людей, для которых почему-то не определена группа. |
||||||||
|
|||||||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Большо спасибо за пример, сижу ковыряюсь с ним. Я забыл указать, что скрипт я придумал для системы управления сайтом. При добавлении дополнительной таблицы добавится головной боли -- как написать систему управления этим все. К тому же все равно возникает необходимость как-то сортировать людей внутри самой группы. Что-то я слегка запутался. Приведу конкретный пример. ------------------------------------------------------ 1 Якушев А.А. издатель 2 Иванов И.И. главный редактор 3 Петров П.П. выпускающий редактор 4 Сидоров С.С. литературный редактор 5 Биржаков К.М. арт-директор 6 Голованова Е.Н. верстальщик 7 Раева Н.Б. завхоз 8 Абрамова А.А. уборщица ------------------------------------------------------ В случае с двумя таблицами мне надо рулить "весом" группы должностей, а внутри перечня должностей с одним весом мне все равно придется как-то сортировать людей: издатель Якушев главнее главного редактора Иванова, хотя они относятся к группе "руководители"! Завтра уборщицу Абрамову повысят до генерального директора и она должна будет иметь рейтинг 2! ------------------ * Все имена (кроме моего) вымышлены и совпадения случяйны |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
так зачем сливать в одну группу? сделай отдельно - иерархию по издательству(директор издательства) и отдельно - иерархию редакторов(глав. ред.). и назначь этим группам одинаковые веса. Но так как группы будут разными, то при выводе у тебя выведутся сначала все директора издательств, потом - все главные редакторы, потом уже - все остальные. впрочем, смотрю, ты все ещё не определился - в каком же порядке выводить.
т.е. у тебя для работы с разными таблицами используется разным код? |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |