【问题标题】:mysql simplifying select query from EAV with multiple joins (codeigniter)?mysql 使用多个连接(codeigniter)简化来自 EAV 的选择查询?
【发布时间】:2012-10-31 21:28:25
【问题描述】:

当前代码不会返回所有行。

例如,如果某些产品没有类别或用户活动被排除在所选行之外。

如何使用有效的查询来简化该查询?

有没有办法通过多个联合或任何其他(简单)方式来做到这一点?

$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();

【问题讨论】:

    标签: mysql sql codeigniter join entity-attribute-value


    【解决方案1】:

    默认情况下,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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多