Задать вопрос

Как запросить из БД несколько картинок для одного товара?

Для каждого товара имеется слайдер. В нём несколько картинок. Вот таблица с товарами:
CREATE TABLE doob.goods (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  id_category varchar(255) NOT NULL,
  name varchar(50) DEFAULT NULL,
  description varchar(255) DEFAULT NULL,
  price decimal(19, 2) DEFAULT 0.00,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 6
AVG_ROW_LENGTH = 3276
CHARACTER SET utf8
COLLATE utf8_general_ci
ROW_FORMAT = DYNAMIC;

Затем я сделал табличку для картинок товара. Тут good_id — это id определённого товара, а link — ссылка на картинку:
CREATE TABLE doob.images (
  good_id int(10) UNSIGNED DEFAULT NULL,
  link varchar(255) DEFAULT NULL,
)
ENGINE = INNODB
AVG_ROW_LENGTH = 4096
CHARACTER SET utf8
COLLATE utf8_general_ci
ROW_FORMAT = DYNAMIC;

Потом я сделал процедуру для получения списка продуктов из определённой категории:
PROCEDURE doob.catalog_get_products_in_category(IN inCategoryId int)
BEGIN
SELECT g.id, g.name, g.description, g.price FROM goods g
    INNER JOIN category c
                 ON g.id_category = c.id
    WHERE      c.id = inCategoryId
    ORDER BY   g.id DESC;
END


Но я не могу сообразить как в одном запросе мне получить помимо основных данных g.name, g.description, g.price ещё и все ссылки к этому товару?
Если обращаться к таблице с изображениями в отдельной процедуре, то придётся как-то вытаскивать good_id нужного товара, а потом ещё и скреплять это всё с остальным массивом.

Не подскажите, дорогие знатоки, как можно это сделать попроще?
  • Вопрос задан
  • 273 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Какой смысл делать хранимку для таких простых запросов?
Зачем делать JOIN с таблицей `category`, которая не используется в результате.
SELECT `g`.`id`, `g`.`name`, `g`.`description`, `g`.`price`, `i`.`images`
  FROM `goods` AS `g`
  LEFT JOIN (
    SELECT `good_id`, GROUP_CONCAT(`link` SEPARATOR ',') AS `images`
    FROM `images`
    GROUP BY `good_id`
  ) AS `i` ON `i`.`good_id` = `g`.`id`
  WHERE  `g`.`id_category` = :category
  ORDER BY `g`.`id` DESC;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
coderisimo
@coderisimo
Я бы создал для каждого товара папку с именем в виде ID товара и просто получал бы список файлов из заданного каталога. Т.е база данных вообще не использовалась бы для хранения ссылок на картинки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы