Запрос MYSQL с выбором CASE

160
25 апреля 2019, 09:00

Есть таблица с картинками

CREATE TABLE `ProductPhoto` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `path` varchar(255) DEFAULT NULL,
      `productId` int(11) unsigned DEFAULT NULL,
      `position` int(11) DEFAULT NULL COMMENT 'позиция картинки в списке изображений товара',
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=23376 DEFAULT CHARSET=utf8;

К одному продукту относятся много картинок, но не у всех продуктов выставлена позиция - она может быть у всех картинок продукта NULL, может быть 1 позицией (могут встречаться с другими позициями в рамках одного продукта) А как отобразить path первой картинки продукта, при этом сделав проверку - если он есть - отдать, в противном случае вернуть картинку с наименьшим id? единственно что пришло в голову так это

SELECT p.* ,
(SELECT 
  CASE 
  WHEN (SELECT COUNT(*) FROM ProductPhoto WHERE productId = p.id AND position = 1) 
    THEN (SELECT path FROM ProductPhoto WHERE productId = p.id AND position = 1) 
  ELSE (SELECT path FROM ProductPhoto WHERE productId = p.id ORDER BY id LIMIT 1)
  END) AS `photo`
FROM Product p LIMIT 15

Заложено ли в синтаксисе SQL более легковесные конструкции языка, позволяющие сделать ту же логику с меньшим количеством обращений, вычислений ?

READ ALSO
Навешивание Angular 7 на HTML генерируемый сервером. Как лучше?

Навешивание Angular 7 на HTML генерируемый сервером. Как лучше?

Проектируем блочный визуальный конструктор сайтовСервер будет отдавать размеченный готовый HTML блоков, но весь визуальный интерфейс, все...

149
vue отправка формы без button и input

vue отправка формы без button и input

Имеется форма и нужно её отправить без button и input использую (a)Почему без? Ломаются стили

164
Верстка email писем 2к18/19

Верстка email писем 2к18/19

Уже несколько лет не верстал email-писем, изменилось ли что-нибудь? Мы по прежнему верстаем на таблицах, а стили – инлайним? Я пытался найти статистики...

155
Выравнивание таблицы, HTML

Выравнивание таблицы, HTML

Есть таблица, на предпоследней строке 3 ячейки, на последней 2: фотоПодскажите пожалуйста, как мне сделать выравнивание последней строки по центру,...

145