Бездействующие пользователи с фильтрами дней в prestashop 1.6

Я пытаюсь добавить ниже запрос в $this_select с левым соединением, но не работает должным образом

Ниже мой рабочий запрос, который отлично работает:

  select      a.id_customer as id_customer,
        a.id_shop,
        a.email,
        a.lastname,
        a.firstname,
        max(c.date_add) as last_visit,
        IFNULL(max(b.date_add),'1001-01-01 00:00:00') as Last_order_date
 from        ps_customer a
 left join  ps_orders b
  on          a.id_customer = b.id_customer
 left join   ps_guest g 
 on          a.id_customer = g.id_customer
left join   ps_connections c
on          g.id_guest = c.id_guest
group by    a.id_customer
 having      to_days(Last_order_date) < to_days(now())- '30'

Но моя проблема в том, что когда я размещаю код запроса ниже в моем контроллере, он не берет первое и второе левое соединение:

    $this->_select='        
    a.id_shop,
    a.email,
    a.lastname,
    a.firstname,
    max(c.date_add) as last_visit,
    IFNULL(max(b.date_add),"'.$default_date.'") as Last_order_date
    ';

    $this->_join = '
    LEFT JOIN `'._DB_PREFIX_.'orders` b ON (a.`id_customer` =b.`id_customer`)';

    $this->_join ='left join   ps_guest g 
    on (a.id_customer = g.id_customer)';

    $this->_join ='left join   ps_connections c
    ON    (   g.id_guest = c.id_guest)      
    group by    a.id_customer
    having      to_days(Last_order_date) < to_days(now())- '.$dormant_filter_days.'';

Я делаю что-то не так в приведенных выше $this_select или $this_join?? Bleow - это исключение из БД, с которым я столкнулся, проблема в том, что я не вижу здесь своих первых двух объединений, т.е. он не берет первые два соединения

введите описание изображения здесь

2 ответа

Решение

Вы переопределяете _join значение при каждом вызове $this->_join =, Вы должны использовать $this->_join .= для второго и последнего присоединения.

$this->_select = '          
    a.id_shop,
    a.email,
    a.lastname,
    a.firstname,
    MAX(c.date_add) AS last_visit,
    IFNULL(MAX(b.date_add), "' . $default_date . '") AS Last_order_date';

$this->_join = 'LEFT JOIN `' . _DB_PREFIX_ . 'orders` b
    ON (a.`id_customer` = b.`id_customer`)';

$this->_join .= ' LEFT JOIN `' . _DB_PREFIX_ . 'guest` g 
    ON (a.id_customer = g.id_customer)';

$this->_join .= ' LEFT JOIN `' . _DB_PREFIX_ . 'connections` c
    ON (g.id_guest = c.id_guest)';

$this->_group = 'GROUP BY a.id_customer';

$this->_having = 'HAVING TO_DAYS(Last_order_date) < TO_DAYS(NOW()) - ' . $dormant_filter_days;

Я попробовал этот способ, который работал для меня:

$this->_select='        
    a.id_shop,
    a.email,
    a.lastname,
    a.firstname,
    a.date_add  as registered_date,
    g.id_customer as guest_id,
    max(c.date_add) as last_visit,
    IFNULL(max(b.date_add),"'.$default_date.'") as Last_order_date
    ';
    $this->_join = '
    LEFT JOIN `'._DB_PREFIX_.'orders` b ON (a.`id_customer`   =b.`id_customer`)     
    LEFT JOIN   ps_guest g      on (a.id_customer = g.id_customer)  
    LEFT JOIN   ps_connections c
    ON    (   g.id_guest = c.id_guest)      
    ';
    $this->_where = 'group by    a.id_customer having   to_days(Last_order_date) < to_days(now())- '.$dormant_filter_days.'  AND  to_days(a.date_add) < to_days(now())- '.$dormant_filter_days.' ';
    $this->_orderBy = 'id_customer';
    $this->_orderWay = 'DESC';
Другие вопросы по тегам