首页 > 解决方案 > Laravel sql if 语句

问题描述

我想在我的页面上显示所有产品。每个产品都有 x 个图像。某些产品的图像设置为封面图像。现在我需要获取所有带有封面图片的产品,如果某个特定产品没有设置封面图片,那么我需要获取一张随机图片。

+----+--------------+
| id | product_name | 
+----+--------------+
|  1 | Ferrari      |  
|  2 | Audi         |  
|  3 | BMW          | 
+----+--------------+

+----+--------------+------------+-------------+--+
| id |  image_name  | product_id | cover_image | 
+----+--------------+------------+-------------+
| 1  | audi.jpg     |          2 |           1 |  
| 2  | Audis.jpeg   |          2 |             |  
| 3  | bemms.jpg    |          3 |           1 |  
| 4  | ferrari.jpeg |          1 |             |  
| 5  | ferr.jpg     |          1 |             |  
+----+--------------+------------+-------------+

到目前为止,我已经尝试过这段代码,但它并没有解决我的问题,因为我只得到带有封面图像集的图片。

public static function get_all_products() {
  return \DB::table('products')
      ->leftjoin('product_pictures', 'products.id', '=', 'product_pictures.product_id')
      ->select('products.name', 'product_pictures.images_name')
      ->where('product_pictures.cover_image', '=', 1)
      ->get();
}

欢迎任何帮助!

标签: phpmysqlsqllaravel

解决方案


您可以在子句product_pictures中稍作调整,对表进行自联接on

select p.*, pp1.*
from products p
join product_pictures pp1 on p.id = pp1.product_id
left join product_pictures pp2 
      on  pp1.product_id =  pp2.product_id
      and case when pp1.cover_image is null
               then pp1.id > pp2.id
               else null 
          end
where pp2.product_id is null
order by p.id

演示


推荐阅读