Перейти к содержимому


Голосования собственников


Сообщений в теме: 13

#1 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 08 Февраль 2014 - 19:41

Здравствуйте!
Нужна помощь. Так и не смог я сам решить эту задачу.
Пытаюсь сделать систему электронного голосования для собственников многоквартирных домов.
Идея такая. Собственник заходит в личный кабинет и видит все текущие голосования по объектам права, собственником которых он является (в подтаблице).
Он должен иметь возможность в подтаблице проставить свое волеизъявление.
Для "фильтрации" вопросов я хочу использовать связь по полю "Голосующий собственник", по которой таблица "Бюллетени" связана с Таблицей "Собственники" до завершения голосования по вопросу. То есть поле "Собственник" там тоже есть и оно заполнено всегда, а поле "Голосующий собственник" содержит ссылку на собственника только при активности голосования. По окончанию голосования ссылка очищается и в подчиненной таблице у собственника уже не высвечивается, а перезаписывается в поле "Проголосовавший собственник" - вторую подтаблицу таблицы "Собственники", хранящую архивы голосования данного собственника, в которой правка уже невозможна. Это не совсем фильтр, а такое применение представления "через заднее крыльцо".
Проблема вот в чем: при заведении очередного вопроса для голосования необходимо автосоздание соответствующих ему строк в таблице "Бюллетени" по каждому объекту права с возможностью автоподсчета итогов голосования по подтаблице в самой таблице "Вопросы голосования". При этом изначально голосующая площадь объекта помещается в поле "Не голосовал", а потом в соответствии с выбором из списка "за", "против", "воздержался" эта сумма должна помещаться в соответствующей колонке таблицы "Бюллетени"

Есть такие таблицы:

Дом
Объект права в доме
Собственник
Вопросы голосования
Бюллетени

При создании нового вопроса для голосования в таблице "Вопросы голосования" нужно сделать вычисление, в котором из справочника "Объекты права" выбираются все объекты, относящиеся к данному дому, где проводится голосование и по каждому найденному объекту нужно сформировать соответствующую ему новую строку, но в таблице "Бюллетени".
в которой прописать ссылки на Дом,Объект права,Собственника,Вопрос голосования и голосующую площадь.
При этом в строке таблицы "Бюллетени" должны быть автозаполнены ссылки на дом, объект права, собственника и вопрос голосования.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Февраль 2014 - 10:34

В чем конкретно то сложности возникают? Алгоритм тут примерно такой:

1. Выбираем все объекты запросом к таблице Объекты права, с фильтром по дому
2. Проходимся циклом по объектам, заполняем массив нужными данными из объекта и вопроса голосования. Добавляем полученный массив данных строкой в Бюллетени.

#3 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 13 Февраль 2014 - 21:08

Просмотр сообщенияCbCoder (10 Февраль 2014 - 10:34) писал:

В чем конкретно то сложности возникают? Алгоритм тут примерно такой:

1. Выбираем все объекты запросом к таблице Объекты права, с фильтром по дому
2. Проходимся циклом по объектам, заполняем массив нужными данными из объекта и вопроса голосования. Добавляем полученный массив данных строкой в Бюллетени.

Правильно. Ножен фрагмент кода. Номера полей и таблиц я проставлю сам

Интересная задача? Будет вам типовая настройка полезная для потребителей вашей базы.

Сообщение отредактировал Александр Пономарев: 13 Февраль 2014 - 21:09


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Февраль 2014 - 10:55

А в чем проблема то с кодом? Это все реализуется стандартными функциями работы с записями, неоднократно описанными на форуме и в документации:

$objects = data_table("Объекты права", "`Дом`='".$line['Дом']."'", "all"); // получаем все объекты в данном доме
foreach ($objects as $object) // проходимся циклом по полученным объектам
{
  $bull = array();
  $bul['Поле_a1'] = $object['Поле_b1']; // заполняем нужные поля бюллетеня
  $bul['Поле_a2'] = $object['Поле_b2'];
  ......................
  insert_query($bull, "Бюллетени"); // добавляем бюллетень
}

Код разумеется примерно-описательный, формализация алгоритма, описанного мною выше.

#5 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:12

Что-то я все-таки делаю не так

$dom=$line['Дом (справочно)'];
$sobr=$line['Голосование'];
$vopr=$line['ID'];
$kvopr=$line['Код вопроса'];
$dnach=$line['Время добавления'];
$dkon=$line['Время завершения голосования'];
$objects = data_table("Объект права", "`Дом`=".$line['Дом (справочно)'], "all");
foreach ($objects as $object)
{
  $bull = array();
//  $bull['Код вопроса'] = $kvopr;
//  $bull['МКД'] = $dom;
  $bull['Объект права'] = $object['ID'];
  $bull['Дом (справочно)'] = $dom;
  $bull['Собственник'] = $object['Собственник'];
  $bull['Вопрос для голосования'] = $vopr;
  $bull['Принятое Решение'] = "Не голосовал";
  $bull['Площадь голосующая'] = $object['Голосующая площадь'];
  $bull['Площадь за'] = 0.00;
  $bull['Площадь против'] = 0.00;
  $bull['Площадь воздержалось'] = 0.00;
  $bull['Площадь не участвовало'] = $object['Голосующая площадь'];
  $bull['Статус'] = "Активен";
  insert_query($bull, "НПС Бюллетень голосования");
}

Выдает ошибку


Ошибка в вычислении.



НПС Вопрос для голосования. :

24:
25:
Ошибка SQL запроса:
SELECT * FROM f_data451 WHERE f5331=
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1



#6 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:17

Поправил строку

$objects = data_table("Объект права", "`Дом`='".$line['Дом (справочно)']."'", "all");

не помогло

#7 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:19

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

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Февраль 2014 - 16:26

Цитата

не помогло

Ошибка SQL по прежнему что ли выходит? Или просто нет результата? По идее после этого изменения sql error должен был пропасть. Если же просто нет результата - то ошиблись с полем $line['Дом (справочно)']

#9 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:32

<p>Нашел косяк в названии, но пока не помогло </p>
<p> </p>
<p> </p>
<div>$dom=$line[&#39;Дом&#39;];</div>
<div>$vopr=$line[&#39;ID&#39;];</div>
<div>$objects = data_table(&quot;НПС Объект права&quot;, &quot;`Дом`=&#39;&quot;.$line[&#39;Дом (справочно)&#39;].&quot;&#39;&quot;, &quot;all&quot;);</div>
<div>foreach ($objects as $object)</div>
<div>{</div>
<div>  $bull = array();</div>
<div>  $bull[&#39;Объект права&#39;] = $object[&#39;ID&#39;];</div>
<div>  $bull[&#39;Дом (справочно)&#39;] = $dom;</div>
<div>  $bull[&#39;Собственник&#39;] = $object[&#39;Собственник&#39;];</div>
<div>  $bull[&#39;Вопрос для голосования&#39;] = $vopr;</div>
<div>  $bull[&#39;Принятое Решение&#39;] = &quot;Не голосовал&quot;;</div>
<div>  $bull[&#39;Статус&#39;] = &quot;Активен&quot;;</div>
<div>  $bull[&#39;Площадь голосующая&#39;] = $object[&#39;Голосующая площадь&#39;];</div>
<div>  $bull[&#39;Площадь за&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь против&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь воздержалось&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь не участвовало&#39;] = $object[&#39;Голосующая площадь&#39;];</div>
<div>  insert_query(&quot;НПС Бюллетень голосования&quot;,$bull);</div>
<div>}</div>


#10 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:33

<p> </p>
<div>$dom=$line[&#39;Дом&#39;];</div>
<div>$vopr=$line[&#39;ID&#39;];</div>
<div>$objects = data_table(&quot;НПС Объект права&quot;, &quot;`Дом`=&#39;&quot;.$line[&#39;Дом (справочно)&#39;].&quot;&#39;&quot;, &quot;all&quot;);</div>
<div>foreach ($objects as $object)</div>
<div>{</div>
<div>  $bull = array();</div>
<div>  $bull[&#39;Объект права&#39;] = $object[&#39;ID&#39;];</div>
<div>  $bull[&#39;Дом (справочно)&#39;] = $dom;</div>
<div>  $bull[&#39;Собственник&#39;] = $object[&#39;Собственник&#39;];</div>
<div>  $bull[&#39;Вопрос для голосования&#39;] = $vopr;</div>
<div>  $bull[&#39;Принятое Решение&#39;] = &quot;Не голосовал&quot;;</div>
<div>  $bull[&#39;Статус&#39;] = &quot;Активен&quot;;</div>
<div>  $bull[&#39;Площадь голосующая&#39;] = $object[&#39;Голосующая площадь&#39;];</div>
<div>  $bull[&#39;Площадь за&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь против&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь воздержалось&#39;] = 0.00;</div>
<div>  $bull[&#39;Площадь не участвовало&#39;] = $object[&#39;Голосующая площадь&#39;];</div>
<div>  insert_query(&quot;НПС Бюллетень голосования&quot;,$bull);</div>
<div>}</div>


#11 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 14 Февраль 2014 - 16:33

Просмотр сообщенияCbCoder (14 Февраль 2014 - 16:26) писал:

Ошибка SQL по прежнему что ли выходит? Или просто нет результата? По идее после этого изменения sql error должен был пропасть. Если же просто нет результата - то ошиблись с полем $line['Дом (справочно)']

Выходит

#12 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 16 Февраль 2014 - 13:42

В общем разобрался. Была путанница с названиями полей в разных таблицах и названиях самих таблиц. Вот это работает:


$dom=$line['Дом']['ID'];
$sobr=$line['Голосование']['ID'];
$vopr=$line['ID'];
$kvopr=$line['Код вопроса'];
$tvopr="ВОПРОС, ВЫНОСИМЫЙ НА ГОЛОСОВАНИЕ:<br><br>".$line['Вопрос для голосования'];
$dnach=$line['Время добавления'];
$dkon=$line['Время завершения голосования'];
$objects = data_table("НПС Объект права", "`Дом`=".$dom, "all");
foreach ($objects as $object){
  $bull = array();
  $bull['Вопрос для голосования'] = $vopr;
  $bull['Вопрос'] = $tvopr;
  $bull['Код вопроса'] = $kvopr;
  $bull['Объект права'] = $object['ID'];
  $bull['Решение'] = "Не голосовал";
  $bull['МКД'] = $dom;
  $bull['Собственник объекта'] = $object['Собственник']['ID'];
  $bull['Площадь голосующая'] = $object['Голосующая площадь'];
  $bull['Не голосовал'] = $object['Голосующая площадь'];
  $bull['Голосующий собственник'] = $object['Собственник']['ID'];
  insert_query($bull, "НПС Бюллетень голосования");
}


#13 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 17 Февраль 2014 - 20:53

Новый косяк. Только что вроде-бы все работало, а сейчас уже не работает. Что не так в этом коде, определяющем суммы проголосовавших площадей по колонкам "за" "против" "воздержался"?


//В таблице Бюллетени подсчитываются суммы голосов за, против и воздержался и значения заносятся в одномерный массив,
//откуда потом извлекаются
$sqlQuery = "SELECT sum(f44651) AS za, sum(f44661) AS pr, sum(f44671) AS vz, sum(f44681) AS ng
FROM ".DATA_TABLE."3311 WHERE status=0 AND f44141=".$vopr."";
$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$pza = $row['za']; //Площадь за
$ppr = $row['pr']; //Площадь против
$pvz = $row['vz']; //Площадь воздержалось
$png = $row['ng']; //Площадь не голосовало
// Общая площадь голосующая
$popsh=$line['Вопрос для голосования']['Площадь голосующая'];
//Площадь проголосовавших так или иначе
$plgol=$pza+$ppr+$pvz;
$line['Тестовое']="Проголосовало ".$plgol;

#14 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 17 Февраль 2014 - 20:54

Сам прочел и сам увидел, что снес куда-то $vopr





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных