mysql 使用group by之后返回的總條數問題


標簽一共有三級。

原本產品只與三級標簽關聯。

這樣的話根據一級標簽就搜索不到產品。

因為客戶要求點擊一級標簽或二級標簽要能搜出三級標簽的產品,所以后台做了處理,把產品與一級二級標簽都進行了關聯,所以導致產品與標簽不是一對一的關系,變成一對多的關系,所以用左連接查詢會有產品重復的情況。

所以在查詢的時候用了mysql的group by,查詢的時候根據產品id來分組。
用了group by之后解決了重復的問題,但是新的問題又出現了,查詢出來的總條數有問題。
在這里插入圖片描述
在這里插入圖片描述
解決方法是拿出分組之后的所有數據,用php的count() 函數算出總條數。但是這樣的方法性能比較差。因為每次都會拿出數據庫一張表所有的數據。
下面是接口代碼

public function listProducts(Request $request) {
        $result = DB::table('product_labels')
            ->select([
                'product_labels.id as id',
                'products_product_id.id as product_id',
                'products_product_id.name as name',
                'products_product_id.image as image',
                'products_product_id.price as price',
                'products_product_id.cer_year as cer_year',
                'product_labels.label_id as label_id',
            ]);
        $result = $result->leftJoin('products as products_product_id', 'products_product_id.id', '=', 'product_labels.product_id');

        $result = $result->groupBy('product_id');
		//取出所有分組之后的數據
        $count = count($result->get());
		
        $result = $result
            ->offset($request->input('offset'))
            ->limit($request->input('length'))
            ->get();
        
        $result = [
            'data' => $result,
            'total' => $count
        ];
        return $this->success($result);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM