Имеем три таблицы shop, category, product в MySQL.
shop: id, name, url
category: id, shop_id, name, url
product: id, shop_id, category_id, price, store_address(тут ENUM из ['ЦУМ','УЮТ'])
По category.id необходимо получить product.id, product.price, category.name, shop.name
1) Как сделать запрос правильно? Я так понял единственным правильным решением будет JOIN. Не в SQL не в MySQL не силен.
2) Мне кажется store_address лучше перенести в таблицу shop, а не держать ее в product
P.S. Для личного саморазвития, интересует вопрос: Думал лучше 1 раз при запросе брать список категорий и магазинов, и на стороне клиента используя JS менять id на name. Все потому, что плохо понимаю как работает JOIN, не будет ли он для каждой записи дергать запрос к category и shop, что бы узнать его name по id? Решение брать список категорий и магазинов отпало почти сразу, мне кажется данный подход выглядит ужасно. Верно ли, что в данном случае лучше использовать JOIN?
Правка: не нужно искать соответствий есть ли такая категория. Нужно просто вместо category_id у product вставить category.name
1)
SELECT p.id, p.price, p.img, p.store_address, c.name, s.name FROM product p
INNER JOIN category c ON p.category_id = c.id
INNER JOIN shop s ON p.shop_id = s.id
WHERE c.id = 170
2) Структура БД вопрос слишком общий без конкретных условий. Т.к. я только учусь и пример условный, вопрос не актуален.
В общем должно быть примерно так, нужно проверять:
SELECT product.id, product.price, category.name, shop.name
FROM category
LEFT JOIN shop ON category.shop_id = shop.id
LEFT JOIN product ON category_id = product.category_id
WHERE category.id = $id
Сборка персонального компьютера от Artline: умный выбор для современных пользователей