[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как реализовать проверку в БД?
Sadonn
Здравствуйте! Есть таблица
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 значит разрешай операцию. если нет значит не разрешай



Спустя 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 написал(а):
Пытался делать вот так

<?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 минуты, 9 секунд (23.06.2010 - 12:45) sergeiss написал(а):
Тут надо другую таблицу делать smile.gif

Некая промежуточная таблица должна содержать:
айди документа (ссылка на таблицу со списком документов)
айди пользователя (ссылка на таблицу со списком юзеров)
порядок пользователя среди согласующих данного документа
статус согласования
дата/время согласования
и любые другие поля, которые могут быть нужны тут

В некоторый момент времени, когда требуется, создаешь записи для всех согласующих, со статусом "не согласовано" и с нужными указателями порядка согласования.
И потом просто "тупо" проверяешь, кто и когда согласовал. Также ты всегда можешь узнать, кто текущий согласующий. И получить любую другую информацию.

Спустя 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)Таблица Отчет_то_Юзер(отчет_ид,юзер_ид, время)

Спустя 50 минут, 16 секунд (23.06.2010 - 14:02) sergeiss написал(а):
Цитата (Sadonn @ 23.06.2010 - 13:57)
не совсем понятен смысл доп. таблицы

А вот для этого:
Цитата (Sadonn @ 23.06.2010 - 13:59)
да.... согласование должно проходить от uid1 до uid5 .... по порядку

Еще раз расписываю мою логику, как я это вижу.
Вот появился документ, который надо согласовать. В этой таблице ты создаешь несколько записей, количество которых равно списку согласующих, и у каждого из них выставлен статус "не согласовал" и порядковый номер согласующего.
Далее. Кто-то из юзеров заходит на некую свою страницу и тут ты ему выдаешь "Мил человек, зараза такая! Твоего согласования ждет такой-то документ!". И до тех пор, пока он не согласует, ты не разрешаешь другим (с бОльшими номерами для этого документа) согласовывать.
И так до тех пор, пока не будут сделаны все согласования.

И эта метода позволяет сделать любое количество согласующих (хоть 20 wink.gif. Только не надо их слишком много! Иначе встанет вся работа smile.gif

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

И еще. Имеет смысл, наверное, ввести еще одно поле: "взял на согласование". Для внутреннего контроля - чтобы согласование не длилось вечно.

Быстрый ответ:

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