Страница 1 из 1

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

Добавлено: 2009-03-19 10:22:26
ProFTP
есть запрос, условия миниальные поставил, я вынимаю его, потом перебираю

подумал, что возможэно не целесобразно так делать, как тут сделать запрос? тут нужно 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;
    }

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

Добавлено: 2009-03-19 10:32:52
zg
запроса нет, читать код на перле желания тоже нет, всё-таки раздел по мускулу.
ProFTP писал(а):или правильно так как есть будет?
более чётко разясни задачу и приведи код запроса

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

Добавлено: 2009-03-19 10:37:42
ProFTP
зпрос вот

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

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;         
              }

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

Добавлено: 2009-03-19 10:44:16
zg
ProFTP писал(а):просто условий есть очень много и сложные и в зависиости что в таблице идет
ну и используй WHERE, в чём проблема?

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

Добавлено: 2009-03-19 10:51:11
ProFTP
а как постаивить
если

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 в перл

я вынимаю значение и не знаю какие они там будут + условия надо постаивть для каждого разные

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

Добавлено: 2009-03-19 11:07:34
zg
ProFTP писал(а):так чтоли будет?
можно и так, но лучше упроситить логику твоей программы

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

Добавлено: 2009-03-19 11:13:25
ProFTP
zg писал(а):
ProFTP писал(а):так чтоли будет?
можно и так, но лучше упроситить логику твоей программы
ты имеешь ввиду просто убрать, не использовать вообще?

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

Добавлено: 2009-03-19 11:18:11
zg
слишком сложная структура. Бери бумажку, ркучу и рисуй таблицы, расписывай данные какие хочешь там хранить и для чего. Потом рисуй какие данные ты хочешь получить и в каком виде.