[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Телефонный справочник.
b1nary
Я пытаюсь написать телефонный справочник для большой организации. Понимаю что это очень легко, но мой справочник основан на структуре предприятия.

Есть таблица otdel в бд MySQL
table: otdel
nomer(int) | name(string)
1 | Иванов
2 | Петров
3 | Сидоров
4 | Карпов


Номер каждого сотрудника необходим для сортировки внутри отдела, т.е. первым должен идти директор/начальник, затем его замы и т.д. Допустим я хочу добавить нового сотрудника в существующий отдел, который будет стоять под номером 2, т.е. мне нужно, чтобы в столбце nomer все значения > или = 2 увеличились на 1. Соответственно тоже самое если я удалю сотрудника под номером 2, у всех значений > 2 отнять 1. Поначалу я начал писать скрипт где в цикле php запрашивал всех у кого >= 2, прибавлял 1, клал в базу и запоминал последнее значение, запрашивал у кого = 3 прибавлял 1, клал в базу и т.д.. Я конечно запутался, к тому же код получился с жутким количеством запросов к б.д., что плохо, ведь народу может быть и тысяча. Понял что делаю что-то не так, от малого количества знаний/опыта.

Скажите пожалуйста, если данный алгоритм видится вам нормальным, то возможно его выполнить проще, к примеру силами мускула, в духе (запрос из головы) mysql_query ("UPDATE nomer FROM otdel SET nomer+1 WHERE nomer >=2 "); и MySQL сама увеличит все значения на 1. Если вы знаете алгоритм лучше/грамотнее (скорее так и есть), пожалуйста поделитесь.
Valick
1) должна быть одна таблица сотрудников, для всех отделов
id_sotrud | id_otdel | id_dolzhnost | f_name | s_name | fam
2) отдельная таблица отделов (связь один ко многим с таблицей сотрудников)
id_otdel | nazvanie
3) отдельная таблица должностей (связь один ко многим с таблицей сотрудников)
id_dolzhnost | nazvanie
если один сотрудник может иметь несколько должностей, то связь должна быть многие ко многим, и следовательно должна быть таблица связи, если один и тот же сотрудник может принадлежать нескольким отделам, то так же нужна дополнительная таблица связей
4) отдельная таблица телефонов, в которой можно держать телефоны отделов и телефоны сотрудников
id | id_sotrud | id_otdel | telephone
где id_sotrud и id_otdel по умолчанию NULL

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

_____________
Стимулятор ~yoomoney - 41001303250491
shmali
Странная таблица для телефонного справочника из 2 полей .
Если она на самом деле такая , то тебе надо в любом случае делать поле ид , с нормальным автоинкрементном , для того чтоб ты мог связать их с остальной информацией , которая очевидно в других таблицах.

Далее , можно конечно сделать это запросом .... Но поскольку это компания и ты сам указал что людей может быть много, я бы отказался от этой идеи сразу .

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

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

Удачи )
Valick
Цитата
Надо писать нормальную утилиту , которая будет добавлять нового пользователя и обновлять остальных

надо БД проектировать нормально, чтобы не пришлось лепить горбатого к стенке и писать такую утилиту

_____________
Стимулятор ~yoomoney - 41001303250491
shmali
Цитата
надо БД проектировать нормально, чтобы не пришлось лепить горбатого к стенке и писать такую утилиту


Утилиту надо писать в любом случае , не каждый же раз писать SQL запрос чтоб добавить нового пользователя , а по поводу базы ... Мы не в курсе есть ли у парня возможность ее переделать . В общем вопрос был как это сделать с тем что уже есть , а не как переделать базу .
Valick
Цитата
не каждый же раз писать SQL запрос чтоб добавить нового пользователя

SQL запрос можно написать один единственный, точнее два
один на обновление порядковых номеров (надеюсь это всетаки не id), второй на вставку нового юзера

_____________
Стимулятор ~yoomoney - 41001303250491
shmali
Цитата
SQL запрос можно написать один единственный, точнее два
один на обновление порядковых номеров (надеюсь это всетаки не id), второй на вставку нового юзера


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

Мы с тобой о том же говорим .
Valick
shmali, да не нужны там вообще номера. даже если нужны, для какого-то изощренного ранжира, то их легко добавить в ту систему которую я описал, но это должно быть дополнение, а не основная логика
___
но в одном вы правы, как ТС хочет пусть так и д....т smile.gif
я лишь показал грамотную структуру БД с точки зрения нормализации

_____________
Стимулятор ~yoomoney - 41001303250491
b1nary
Цитата
1) должна быть одна таблица сотрудников, для всех отделов
2) отдельная таблица отделов (связь один ко многим с таблицей сотрудников)

Ровно так всё и есть.

Цитата
Странная таблица для телефонного справочника из 2 полей.


Нет никакого справочника из 2-х полей, это пример.

Цитата
..то тебе надо в любом случае делать поле ид , с нормальным автоинкрементном , для того чтоб..


Да всё так и сделано. Вопрос не в этом.

Цитата
SQL запрос можно написать один единственный, точнее два
один на обновление порядковых номеров (надеюсь это всетаки не id), второй на вставку нового юзера


Ого! Спасибо кэп! Я для этого тему и создал, чтобы узнать как! Напишите подробнее пожалуйста если знаете.

Цитата
Поместить это в какой то метод какого то класса , который будет принимать инфу о человеке которого надо добавить в бд..

Именно так я и сделаю, как только напишу метод о котором спрашиваю вас в первом сообщении.

Цитата
да не нужны там вообще номера. даже если нужны, для какого-то изощренного ранжира, то их легко добавить в ту систему которую я описал, но это должно быть дополнение, а не основная логика

Да не вопрос, если не номера, то опишите другой алгоритм.
b1nary
Цитата (b1nary @ 24.01.2013 - 13:14)
возможно его выполнить проще, к примеру силами мускула, в духе (запрос из головы) mysql_query ("UPDATE  nomer FROM otdel SET nomer+1 WHERE nomer >=2 "); и MySQL сама увеличит все значения на 1 ?

Вот ржака, так конечно можно, отвечаю я сам себе, тут просто у тебя ошибка в синтаксисе, надо так: ("UPDATE otdel SET nomer=nomer+1 WHERE nomer>=2")

Спасибо мне за помощь. лол!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.