標簽一共有三級。
原本產品只與三級標簽關聯。
這樣的話根據一級標簽就搜索不到產品。
因為客戶要求點擊一級標簽或二級標簽要能搜出三級標簽的產品,所以后台做了處理,把產品與一級二級標簽都進行了關聯,所以導致產品與標簽不是一對一的關系,變成一對多的關系,所以用左連接查詢會有產品重復的情況。
所以在查詢的時候用了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);
}
