Биллинговая система Nodeny
16 Мая 2024, 06:56:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: listuser.pl  (Прочитано 4487 раз)
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« : 16 Апреля 2011, 22:56:51 »

При поиске всех домов на улице не учитывается пустое значение дома в результате чего могут появляться дома с номером "0"
Ну и сам фикс:
Код:
$sql=qq{SELECT DISTINCT d.field_value AS house FROM
  (SELECT revision AS rev2 FROM (
    SELECT MAX(v.revision) AS rev
      FROM (SELECT revision,dopfield_id,parent_id FROM dopvalues GROUP BY revision) AS v
      INNER JOIN dopfields f ON f.id=v.dopfield_id GROUP BY v.parent_id,f.template_num
  ) a INNER JOIN dopdata b ON a.rev=b.revision WHERE field_alias='p_street:street:name_street' AND field_value='$adr_street') c
  INNER JOIN dopdata d ON c.rev2=d.revision WHERE field_alias='_adr_house';
};
Приводим к следующему виду:
Код:
$sql=qq{SELECT DISTINCT d.field_value AS house FROM
  (SELECT revision AS rev2 FROM (
    SELECT MAX(v.revision) AS rev
      FROM (SELECT revision,dopfield_id,parent_id FROM dopvalues GROUP BY revision) AS v
      INNER JOIN dopfields f ON f.id=v.dopfield_id GROUP BY v.parent_id,f.template_num
  ) a INNER JOIN dopdata b ON a.rev=b.revision WHERE field_alias='p_street:street:name_street' AND field_value='$adr_street') c
  INNER JOIN dopdata d ON c.rev2=d.revision WHERE field_alias='_adr_house' AND field_value;
};
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #1 : 17 Апреля 2011, 09:41:07 »

ага, выпустим багфикс вместе с другими исправлениями
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #2 : 23 Июня 2012, 15:53:43 »

Кстати, вот еще что... Было бы не плохо выводить в списке домов не тоько дом с чистым номером, т.е. без блока, а и дома с блоком, и, при поиске, если оставляется пустым поле "Блок", то и искать в домах без блока, а если надо все дома и все блоки, то при поиске в поле "Блок" указывать "*", например.
Значит, чтобы в списке уникальных домов получить блок делаем следующее:
В файле web/listuser.pl ищем: # варианты домов на выбранной улице и приводим к следующему виду:
Код:
# варианты домов на выбранной улице
if( $adr_street && $adr_block_id )
{  #  выбрана улица ($adr_street) и поле `Дом` существует в dopfields
   $houses='';
   $url="$scrpt&f=d&tmpl=$template_adr&dopfield_full_$adr_street_id=1&dopfield_$adr_street_id=$adr_street&dopfield_full_
$adr_house_id=1&dopfield_$adr_house_id=";
   $sql="SELECT r.rev,dv.parent_id FROM dopvalues dv INNER JOIN rev_users r ON r.rev=dv.revision AND r.id=dv.parent_id WHERE r.template_num=2 AND dv.field_value='$adr_street' AND dv.dopfield_id='$adr_street_id'";
   $sql="SELECT t1.rev,dv.field_value house FROM dopvalues dv INNER JOIN ($sql) t1 ON t1.rev=dv.revision WHERE dv.dopfield_id='$adr_house_id' AND dv.field_value";
   $sql="SELECT t2.house,dv.field_value block FROM dopvalues dv INNER JOIN ($sql) t2 ON t2.rev=dv.revision WHERE dv.dopfield_id='$adr_block_id' GROUP BY concat(t2.house,dv.field_value)";
   $sth=&sql($dbh,$sql,"Все уникальные дома на улице № $adr_street");
   while( $p=$sth->fetchrow_hashref )
   {
      $house=int $p->{house};
      $block=&Filtr_out($p->{block});
      $houses.=&ahref($url.$house."&dopfield_$adr_block_id=$block",$house.$block);
   }
   $OUT.=&MessX("$dopf_a_to_name{_adr_house} на улице ".&bold($streets{$adr_street}).' :'.&div('nav',$houses),0,1) if $houses;
}
Для решения второй "задачи":
в том же файле ищем:
Код:
foreach $id ( sort{ ($sort==$a) cmp ($sort==$b) } @fields )
{
   $val=$F{"dopfield_$id"};
   $nosearch=($val=~/^\s*$/);
заменяем на:
Код:
foreach $id ( sort{ ($sort==$a) cmp ($sort==$b) } @fields )
{
   $val=$F{"dopfield_$id"};
   $nosearch=($val=~/^\s*$/) && $id!=$dopf_a_to_id{_adr_block};
   $val='%' if $id==$dopf_a_to_id{_adr_block} && $val eq '*';
Результаты в аттаче ;)
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #3 : 28 Июня 2012, 12:22:49 »

Херня получается )))))
А чтобы была не херня, нужно еще поправить файлик: web/dopdata.pl
Найти в нем:
Код:
    $comment='';
    $val=$field_value;
    $h="dopfield_$did";
и сделать таким:
Код:
    $comment='';
    $val=$field_alias eq '_adr_block'?($field_value||'*'):$field_value;
    $h="dopfield_$did";
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #4 : 28 Июня 2012, 14:50:59 »

Все равно херня ))) Забить пока, если кто поставил - убрать и забить
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #5 : 28 Июня 2012, 16:43:50 »

лучше отдельным постом потом все от А до Я
ты крут, все получится
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #6 : 29 Июня 2012, 02:40:15 »

Все равно херня ))) Забить пока, если кто поставил - убрать и забить
это хотел получить?
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #7 : 29 Июня 2012, 08:42:32 »

Нет, это я получил запросом, тут никаких проблем. Задача такая:
Если в поиске вбивается улица и дом, например: "ул. Кукуева 11", то в результатах должны быть только абона по "Кукуева 11", если "Кукуева 11а", то только "11а". Загвоздка полчается в том, что если сделать как в первом предложенном варианте, то результат будет такой, как требуется, но... Если делать поиск по допданным, например по номеру тел., то это правило опять будет действовать.. И в результате можем получить дулю... )))  Желаемого можно добиться так:
учитывать блок только тогда, когда он не пуст (это делается без каких-либо вмешательств), и когда ищется по адресу, т.е. в запросе поиска присутствует улица или дом. Просто вчера не было времени чтобы нарисовать этих 2-е строчки условия :PP
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #8 : 29 Июня 2012, 15:37:48 »

в web/listuser.pl найти:
Код:
 537  @fields=grep{ $dopf_id_to_template{$_}==$Ftmpl } keys %dopf_id_to_template;
 538  foreach $id ( sort{ ($sort==$a) cmp ($sort==$b) } @fields )
 539  {
 540     $val=$F{"dopfield_$id"};
 541     $nosearch=($val=~/^\s*$/);
Привести к такому виду:
Код:
 537  @fields=grep{ $dopf_id_to_template{$_}==$Ftmpl } keys %dopf_id_to_template;
 538  $hid = $dopf_a_to_id{"_adr_house"};
 539  $bid = $dopf_a_to_id{"_adr_block"};
 540  foreach $id ( sort{ ($sort==$a) cmp ($sort==$b) } @fields )
 541  {
 542     $val=$F{"dopfield_$id"};
 543     $nosearch=($val=~/^\s*$/);
 544     $nosearch=0 if $id==$bid && $F{"dopfield_$hid"} && $nosearch;
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!