Как использовать JOIN запрос здесь? - PullRequest
0 голосов
/ 18 ноября 2011

Я использую Zend. Я реализовал Рекомендуемые товары на домашней странице. Теперь я хочу показать обзор под каждым продуктом. Отзывы могут быть или не быть предоставлены для всех продуктов. Мне нужно использовать запрос, чтобы получить продукты, имеющие рейтинг отзыва, а также не имеющие рейтинга отзыва.

Ниже мой код,

public function funFutureProduct($option = array())
{       
    $start = isset($option['start']) ? $option['start'] : 0;
    $limit = isset($option['limit']) ? $option['limit'] : Zend_Registry::get("featured_prod_row_length");
    $oDb=Zend_Registry::get("db");      
    $list_select = $oDb->select()
        ->from(array('p'=>'product'), array('p.*'))
        ->join(array('m'=>'manufacturers'),'p.manufacturer_id = m.manufacturer_id', array("manufacture_name"=>'m.name'))
        ->join(array('s'=>'category'),'s.category_id = p.category_id', array("sub_category_name"=>'s.name'))
        ->join(array('c'=>'category'),'c.category_id = s.parent', array("category_name"=>'c.name'))
        ->join(array('p_w'=>'prod_warehouse'),'p_w.product_id = p.product_id', array("curent_stock"=>'p_w.curent_stock'))
        ->join(array('r'=>'review'),'p.product_id = r.product_id and r.status = 1', array("avg_review_rating"=>new Zend_Db_Expr('AVG(r.rating)'),"count_user_rating"=>new Zend_Db_Expr('COUNT(r.product_id)')))
        ->limit($limit, $start);

    $list_select->where('s.status = 1 AND c.status = 1 AND p.status = 1 AND m.status = 1 AND p.product_id != "" AND p_w.status > 0');
    $list_select->group('p.product_id');
    $list_select->where('p.featured_product = 1');
    $aData=$oDb->fetchall($list_select);
    return $aData;
}

Когда я выполняю выше, он только выбирает продукт, у которого есть рейтинг обзора, я также хочу получить продукт, у которого нет рейтинга обзора?

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы должны сделать левое соединение. Использование $select->joinLeft()

->joinLeft(array('r'=>'review'),'p.product_id = r.product_id and r.status = 1', array("avg_review_rating"=>new Zend_Db_Expr('AVG(r.rating)'),"count_user_rating"=>new Zend_Db_Expr('COUNT(r.product_id)')))

Метод join() по умолчанию для Zend_Db_Select предполагает, что вы хотите сделать INNER JOIN.

0 голосов
/ 21 ноября 2011

защищен $ _user_profile = "user_profile"; // Ваше имя таблицы

защищенный $ _app_functionalities_profile = "app_functionalities_profile"; // другое имя таблицы

$ select = $ this-> select ()

-> setIntegrityCheck (ложь)

-> от ($ это -> _ user_profile)

-> от ($ это -> _ app_functionalities_profile)

-> где (? USER_PROFILE.user_id = ', 1)

-> где ( 'USER_PROFILE.profile_id = app_functionalities_profile.profile_id');

$ userdata = $ this-> fetchAll ($ select);

Используйте это для условия соединения. Вы можете использовать любую другую таблицу и где условие для выполнения вашего требования.

...