0

現在のコードはすべての行を返しません。

たとえば、一部の製品にカテゴリがない場合や、ユーザー アクティビティが選択した行から除外されている場合などです。

作業中のクエリでそのクエリを簡素化する方法は?

複数のユニオンまたは他の(単純な)方法でそれを行う方法はありますか?

$q = $this->db->select('products.id, users_activity.timestamp AS added, products_content.lang, products_content.product_name, products_content.price, products_categories_content.category_name AS category, products_categories_content.category_id AS category_id')
        ->from('products')
        ->join('products_content', 'products.id = products_content.product_id')
        ->join('products_and_categories', 'products.id = products_and_categories.product_id')
        ->join('products_categories_content', 'products_categories_content.category_id = products_and_categories.category_id')
        ->join('users_activity', 'users_activity.id = products.id AND users_activity.lang = products_content.lang')->where('users_activity.type', 'product')
        ->group_by(array('products.id', 'products_content.lang', 'users_activity.id'))
        ->limit($limit, $offset)
        ->order_by($sort_by, $sort_order);

if (strlen($query_array['lang']) && ! is_numeric($query_array['lang'])) { $q->like('lang', $query_array['lang']); }
if (strlen($query_array['product_name'])) { $q->like('product_name', $query_array['product_name']); }
if (strlen($query_array['category'])) { $q->where('category_id', $query_array['category']); }

$return['rows'] = $q->get()->result();
4

1 に答える 1

2

デフォルトでは、CI は内部結合を作成します。内部結合は、レコードが両方のテーブルにある場合にのみ結果を見つけます。したがって、製品にカテゴリがない場合、このステートメントはレコードを返しません。

$this->db->join('products_and_categories', 'products.id = products_and_categories.product_id');

この結合を左結合に変更すると、カテゴリがなくても製品が常に返されます。

$this->db->join('products_and_categories', 'products.id = products_and_categories.product_id', left);
于 2012-10-31T22:09:25.510 に答える