Laravel sql if заявление - PullRequest
0 голосов
/ 23 мая 2018

Я хочу показать все товары на моей странице.Каждый продукт имеет х количество изображений.Некоторые продукты имеют изображения, которые установлены как изображения обложки.Теперь мне нужно получить все продукты с изображениями обложки, и если у определенного продукта нет набора изображений обложки, тогда мне нужно получить случайное изображение.

+----+--------------+
| 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();
}

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете сделать самостоятельное соединение с 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

Демо

0 голосов
/ 23 мая 2018

Я собираюсь ответить на свой вопрос, может быть, кто-то столкнется с той же проблемой.SQL-запрос, который мне действительно нужен:

select id, name, images_name from (
(select `products`.`id`, `products`.`name`,  `product_pictures`.`cover_image`, `product_pictures`.`image_name` 
from `products` 
left join `product_pictures` on `products`.`id` = `product_pictures`.`product_id` 
where `product_pictures`.`cover_image` = 1 OR `product_pictures`.`cover_image` IS NULL
group by `products`.`id`) 

UNION

select id, name, images_name from (
(select `products`.`id`, `products`.`name`,  `product_pictures`.`cover_image`, `product_pictures`.`image_name` 
from `products` 
left join `product_pictures` on `products`.`id` = `product_pictures`.`product_id` 
where `product_pictures`.`cover_image` = 0
group by `products`.`id`) 

    ) t
group by id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...