otchet(oid,.......,statusid1,uid1,statusid2,uid2,statusid3,uid3, и.т.),
где statusid - идентификатор статуса докуммента,
uid - идентификатор пользователя
Как мне реализовать следующее:
допустим пользователь зашел в систему под своим uid = 2 и нажал на кнопку, нужно проверять statusid1 и uid1 в БД, если есть в тех ячейках запись, тогда разрешить UPDATE uid2 и statusid2 и так для 5 пользователей... т.е. uid = 5 проверяем uid4 statusid4
Спустя 10 минут, 2 секунды (23.06.2010 - 11:44) Basili4 написал(а):
Не логичная структура таблицы. На мой взгляд её надо переделать если колво пользователей изменится.
Я бы предложид такую
userid - индификатор юзера
statusid его статус
сам заспрос прост select * from table where userid=$id
проверяшь каков статус пользователя например если больше 0 значит разрешай операцию. если нет значит не разрешай
Я бы предложид такую
userid - индификатор юзера
statusid его статус
сам заспрос прост select * from table where userid=$id
проверяшь каков статус пользователя например если больше 0 значит разрешай операцию. если нет значит не разрешай
Спустя 2 минуты, 29 секунд (23.06.2010 - 11:46) Sadonn написал(а):
Цитата (Basili4 @ 23.06.2010 - 08:44) |
Не логичная структура таблицы. На мой взгляд её надо переделать если колво пользователей изменится. Я бы предложид такую userid - индификатор юзера statusid его статус сам заспрос прост select * from table where userid=$id проверяшь каков статус пользователя например если больше 0 значит разрешай операцию. если нет значит не разрешай |
А каким образом я тогда смогу увидеть историю? кто уже нажимал кнопку, а кто нет?? и в конечном итоге нужно будет проверить если все 5 пользователей нажали кнопку тогда изменить статус документа
Спустя 5 минут, 6 секунд (23.06.2010 - 11:51) Basili4 написал(а):
Устанавливай статут пользователя например после нажатия кнопки 0
Спустя 4 минуты, 48 секунд (23.06.2010 - 11:56) Sadonn написал(а):
Пытался делать вот так
но после нажатия кнопки uid2 соответственно все данные uid1 заменяются на uid2
<?php
session_start();
include ('include/bdconnect.php');
$stset = $_POST['stset'];
$id = $_SESSION['id'];
$uid = $_SESSION['uid'];
echo "статус $stset";
echo "пользователь $uid";
echo "товар $id";
$result = mysql_query("SELECT uid FROM otchet WHERE `otchet`.id_tovar=".$id." ");
$row = mysql_fetch_array($result);
if ($row['uid'] == $uid-1)
{
mysql_query("UPDATE `otchet` SET `otchet`.`StatusID`=".$stset.",`otchet`.`uid`=".$uid."
WHERE `otchet`.id_tovar=".$id."");
}
else
{
echo "Повторно нельзя согласовать документ!";
}
?>
но после нажатия кнопки uid2 соответственно все данные uid1 заменяются на uid2
Спустя 46 минут, 31 секунда (23.06.2010 - 12:42) SlavaFr написал(а):
какой принцзип работы то?
Юзер 2 не может отчитатся пока Юзер 1 не отчитался?
Юзер 2 не может отчитатся пока Юзер 1 не отчитался?
Спустя 2 минуты, 9 секунд (23.06.2010 - 12:45) sergeiss написал(а):
Тут надо другую таблицу делать
Некая промежуточная таблица должна содержать:
айди документа (ссылка на таблицу со списком документов)
айди пользователя (ссылка на таблицу со списком юзеров)
порядок пользователя среди согласующих данного документа
статус согласования
дата/время согласования
и любые другие поля, которые могут быть нужны тут
В некоторый момент времени, когда требуется, создаешь записи для всех согласующих, со статусом "не согласовано" и с нужными указателями порядка согласования.
И потом просто "тупо" проверяешь, кто и когда согласовал. Также ты всегда можешь узнать, кто текущий согласующий. И получить любую другую информацию.
Некая промежуточная таблица должна содержать:
айди документа (ссылка на таблицу со списком документов)
айди пользователя (ссылка на таблицу со списком юзеров)
порядок пользователя среди согласующих данного документа
статус согласования
дата/время согласования
и любые другие поля, которые могут быть нужны тут
В некоторый момент времени, когда требуется, создаешь записи для всех согласующих, со статусом "не согласовано" и с нужными указателями порядка согласования.
И потом просто "тупо" проверяешь, кто и когда согласовал. Также ты всегда можешь узнать, кто текущий согласующий. И получить любую другую информацию.
Спустя 12 минут, 5 секунд (23.06.2010 - 12:57) Sadonn написал(а):
не совсем понятен смысл доп. таблицы
Спустя 2 минуты, 17 секунд (23.06.2010 - 12:59) Sadonn написал(а):
Цитата (SlavaFr @ 23.06.2010 - 09:42) |
какой принцзип работы то? Юзер 2 не может отчитатся пока Юзер 1 не отчитался? |
да.... согласование должно проходить от uid1 до uid5 .... по порядку
Спустя 12 минут, 42 секунды (23.06.2010 - 13:12) SlavaFr написал(а):
ну тогда @sergeiss тебе все правильно предложил.
Если ты собираешся с твоей программой какието изменения или улучшения делать , то тебе без Нормализации таблиц не как не обойтись
Возможое нормализирование:
1Таблица Отчет.
2)Таблица Юзер
3)Таблица Отчет_то_Юзерприоритет(отчет_ид,юзер_ид,юзер_приоритет int not null)
4)Таблица Отчет_то_Юзер(отчет_ид,юзер_ид, время)
Если ты собираешся с твоей программой какието изменения или улучшения делать , то тебе без Нормализации таблиц не как не обойтись
Возможое нормализирование:
1Таблица Отчет.
2)Таблица Юзер
3)Таблица Отчет_то_Юзерприоритет(отчет_ид,юзер_ид,юзер_приоритет int not null)
4)Таблица Отчет_то_Юзер(отчет_ид,юзер_ид, время)
Спустя 50 минут, 16 секунд (23.06.2010 - 14:02) sergeiss написал(а):
Цитата (Sadonn @ 23.06.2010 - 13:57) |
не совсем понятен смысл доп. таблицы |
А вот для этого:
Цитата (Sadonn @ 23.06.2010 - 13:59) |
да.... согласование должно проходить от uid1 до uid5 .... по порядку |
Еще раз расписываю мою логику, как я это вижу.
Вот появился документ, который надо согласовать. В этой таблице ты создаешь несколько записей, количество которых равно списку согласующих, и у каждого из них выставлен статус "не согласовал" и порядковый номер согласующего.
Далее. Кто-то из юзеров заходит на некую свою страницу и тут ты ему выдаешь "Мил человек, зараза такая! Твоего согласования ждет такой-то документ!". И до тех пор, пока он не согласует, ты не разрешаешь другим (с бОльшими номерами для этого документа) согласовывать.
И так до тех пор, пока не будут сделаны все согласования.
И эта метода позволяет сделать любое количество согласующих (хоть 20 . Только не надо их слишком много! Иначе встанет вся работа
Также, ты всегда можешь вывести данные по каждому документу, посмотреть, кто согласует с большой задержкой.
И еще. Имеет смысл, наверное, ввести еще одно поле: "взял на согласование". Для внутреннего контроля - чтобы согласование не длилось вечно.