根据值存在从表中选择

时间:2019-07-11 21:36:09

标签: php mysql database codeigniter-3

目前,我的代码由两个查询执行,并且正在运行。 这里的问题是,有没有办法将它们作为一个整体来执行?

广告表

enter image description here

活动日志表

enter image description here

我想要什么?

基本上,我需要查询来从广告表中选择行,但有两个条件:

  1. 如果行 advertisements.web_address 的值与活动日志.path 的值(表示该行存在于活动日志中)和 activitylogs.timeperiod < / strong>不在今天之间,然后选择它
  2. 如果行 advertisements.web_address 的值与活动日志.path 的值匹配,但 activitylogs.timeperiod 在今天之间,请不要选择移至下一行
  3. 如果值不匹配(表示活动日志中不存在该行)或 activitylogs.timeperiod 在今天之前,则选择它

我的代码:

    $timeperiods = timeperiods($this->timezone);
    $subscription = $this->db
        ->select('*')
        ->from('advertisements')
        ->get();

    if ($subscription->num_rows() > 0){
        $subs = $subscription->result_array()[0];
        $rows = $subscription->num_rows();

        $activitylogs = $this->db
            ->select('*')
            ->from('activitylogs')
            ->where('action', 'visited')
            ->where('path', $subs['web_address'])
            ->where("timeperiod NOT BETWEEN {$timeperiods['today_start']} AND {$timeperiods['today_end']}", FALSE, FALSE)
            ->limit(1)->order_by('timeperiod', 'ASC')
            ->get();

        if ($activitylogs->num_rows() > 0){   
            print_r( $this->security->xss_clean($activitylogs->result_array()[0]) );                                     
        }
        else{
            print_r($this->security->xss_clean($subs));                          
        }
    }
    else{
        echo 'not found';
    }

0 个答案:

没有答案