сложный запрос с условиями

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

сложный запрос с условиями

Непрочитанное сообщение ProFTP » 2009-03-19 10:22:26

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

подумал, что возможэно не целесобразно так делать, как тут сделать запрос? тут нужно if else использовать?

просто некоторые вещи иудт из вне...

и приходиться вынмиать, а потом удалять...

или правильно так как есть будет?

Код: Выделить всё

       my $dbh = $c->model('DBI')->dbh;

    my $sth = $dbh->prepare("SELECT id_co,  
                                                     id_un,            
            						   id_se,             
  											heading_name_co,  
  											active_co,        
  											hiden_co,         
  											hiden_g_co,       
  											close_co,         
  											created 
  			                      FROM content
                              WHERE id_se = ?
                                $sql
                             	ORDER BY heading_name_co desc
                             ");
    $sth->execute($args[0]);
     my @loop_data = ();

    $sth->execute();    while (my $ref = $sth->fetchrow_hashref()) {        push(@loop_data, $ref);    } 
        $sth->finish();

    $sth->finish();      
           
              foreach $_ (@loop_data) {
            
            if ($_->{active_co} == 0 && ($_->{id_un} != $c->user->{user}->{id} 
            			|| !$c->check_user_roles('moder_se') )            )  {           
            $_->{no_show_co} = 1;            
            }
            
            if ($_->{id_un} == $c->user->{user}->{id} 
            			|| $c->check_user_roles('moder_se')             )  {           
            $_->{modering_co} = 1;            
            }
            
            if ($_->{hiden_co} == 1 && ($_->{id_un} != $c->user->{user}->{id} 
            			|| !$c->check_user_roles('moder_se') )            )  {           
            $_->{no_show_co} = 1;
             
            }
                        
            if ($_->{hiden_g_co} == 1 && $c->user_exists() == 0  )  {           
            $_->{no_show_co} = 1;         
              }
   
    
        		$_->{close_se} = $_->{close_se} == 1 ? '1' : undef;    
        		$_->{active_co} = $_->{active_co} == 0 ? '1' : undef;    
        		
        		
        		
        		$_->{edit_active_co} = $c->check_user_roles('moder_co') ? '1' : undef;           		
        		$_->{edit_close_co} = $c->check_user_roles('moder_co') ? '1' : undef;         
        		
   
    		  }
    		 
		  
   		  for my $loopindex (0..@loop_data) {

  		for my $key (keys %{$loop_data[$loopindex]})
    {
      #print "$key => @{$loop_data}[$loopindex]{$key},";
 ###
  # тут я не дописал, типо удалить то что не показывать  $_->{no_show_co} = 1;
 ###
         splice @{$loop_data}, $loopindex;
    }
    
    }


          
    if (@loop_data) { 
  	  		 $c->stash->{messages} = \@loop_data;
    } else {
   		 $c->stash->{messages_error} = 1;
    }
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: сложный запрос с условиями

Непрочитанное сообщение zg » 2009-03-19 10:32:52

запроса нет, читать код на перле желания тоже нет, всё-таки раздел по мускулу.
ProFTP писал(а):или правильно так как есть будет?
более чётко разясни задачу и приведи код запроса

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: сложный запрос с условиями

Непрочитанное сообщение ProFTP » 2009-03-19 10:37:42

зпрос вот

Код: Выделить всё

SELECT id_co,  
                                                     id_un,            
                                 id_se,             
                                   heading_name_co,  
                                   active_co,        
                                   hiden_co,         
                                   hiden_g_co,       
                                   close_co,         
                                   created 
                                 FROM content
                              WHERE id_se = ?
                                ORDER BY heading_name_co desc

просто условий есть очень много и сложные и в зависиости что в таблице идет

я подумал что я не могу додуматься как-то запрос правильнй поставить

целесобразно ли вынуть всё, а лишнее потом удалить? (просто возможно что лишнего будет много очень, зря вынимать)

или пофиг?

вот условия:
(их сначало возможно надо определить, а потом запрос построить?)
(условий планируется еще больше)

Код: Выделить всё

   if ($_->{active_co} == 0 && ($_->{id_un} != $c->user->{user}->{id} 
                     || !$c->check_user_roles('moder_se') )            )  {           
            $_->{no_show_co} = 1;            
            }
            
            if ($_->{id_un} == $c->user->{user}->{id} 
                     || $c->check_user_roles('moder_se')             )  {           
            $_->{modering_co} = 1;            
            }
            
            if ($_->{hiden_co} == 1 && ($_->{id_un} != $c->user->{user}->{id} 
                     || !$c->check_user_roles('moder_se') )            )  {           
            $_->{no_show_co} = 1;
             
            }
                        
            if ($_->{hiden_g_co} == 1 && $c->user_exists() == 0  )  {           
            $_->{no_show_co} = 1;         
              }
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: сложный запрос с условиями

Непрочитанное сообщение zg » 2009-03-19 10:44:16

ProFTP писал(а):просто условий есть очень много и сложные и в зависиости что в таблице идет
ну и используй WHERE, в чём проблема?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: сложный запрос с условиями

Непрочитанное сообщение ProFTP » 2009-03-19 10:51:11

а как постаивить
если

id_un не ровняется сессии пользовательской и если active_co равняется 0 ?

если ровняется active_co == 1, то показать всё

так чтоли будет?

Код: Выделить всё

WHERE ((id_un != ? AND active_co = 0)  OR  active_co = 1) 
      OR ( hiden_co = 1 AND id_un != ?)
в id_un передать id в перл

я вынимаю значение и не знаю какие они там будут + условия надо постаивть для каждого разные
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: сложный запрос с условиями

Непрочитанное сообщение zg » 2009-03-19 11:07:34

ProFTP писал(а):так чтоли будет?
можно и так, но лучше упроситить логику твоей программы

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: сложный запрос с условиями

Непрочитанное сообщение ProFTP » 2009-03-19 11:13:25

zg писал(а):
ProFTP писал(а):так чтоли будет?
можно и так, но лучше упроситить логику твоей программы
ты имеешь ввиду просто убрать, не использовать вообще?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: сложный запрос с условиями

Непрочитанное сообщение zg » 2009-03-19 11:18:11

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