Непонятная структура

230
28 декабря 2017, 22:20

Товар, который может принадлежать нескольким категориям одновременно. Запросы: (1) достать все товары вместе с их категориями, (2) достать товар 'Огурец' вместе с его категориями, (3) достать все товары из категории 'Овощи', (4) достать все товары, которые принадлежат более чем одной категории

Сама структура

таблица product (продукт), поля: id, name (название), product_id (айди продукта)
таблица order (порядок), поля: id, product_id, category_id (айди категории)
таблица category (категория), поля: id, name (название), 

Зачем у продукта, создавать поле айди продукта, если у него и так будет id?

Что означает таблица order? Почему она так названа?

У задач есть решения.

достать все товары вместе с их категориями:

SELECT * FROM product
LEFT JOIN order ON prdouct.category.id = order.id
LEFT JOIN category ON order.category_id = category.id

Вот эту цепочку

prdouct.category.id

я вообще не понимаю

Answer 1

Зачем у продукта, создавать поле айди продукта, если у него и так будет id?

Ну например product_id может вводиться вручную, содержать буквы и прочие не-цифры, или вообще импортироваться из другой системы. Он даже может быть неуникальным - синонимы никто не отменял.

Что означает таблица order? Почему она так названа?

Таблица организует связь много-ко-много. А название, вероятно, взято с потолка - всё одно название ни на что не влияет.

Вот эту цепочку

prdouct.category.id 

я вообще не понимаю

Вероятно, prdouct - это наименование базы данных.

Answer 2

Зачем у продукта, создавать поле айди продукта, если у него и так будет id?

Вы правы, смысла нет. Скорее всего ошибка копипасты

Что означает таблица order?

Обычная классическая кросс-таблица

Почему она так названа?

Этот вопрос нужно задавать разработчику этой БД

Вот эту цепочку

prdouct.category.id

я вообще не понимаю

Это бред. Спросите у того, кто писал этот запрос. Возможно prdouct это название БД, но тогда все равно запрос бессмысленный

А вообще для задачи

достать все товары вместе с их категориями:

Решение такое

SELECT product.*, category.* FROM product
LEFT JOIN order ON order.product_id = product.id
LEFT JOIN category ON order.category_id = category.id
Answer 3

prdouct.category.id

Обычная опечатка. Похоже на product.category_id, но должно быть

LEFT JOIN order ON product.id = order.product_id
READ ALSO
Алгоритм создание вложенный запросов в MySql

Алгоритм создание вложенный запросов в MySql

Всем приветЕсть вот такое вот задание

211
не изменяется значение max_allowed_packet mysql

не изменяется значение max_allowed_packet mysql

Добрый день! Надо экспортировать БД mysql 57

252
TcpClient.GetStream().Write() обнуляет ведущий бит

TcpClient.GetStream().Write() обнуляет ведущий бит

Использую telnet-клиент на основе SystemNet

282
Не заполняется окно потоков MSVS 2012

Не заполняется окно потоков MSVS 2012

При запуске приложения, у которого более 20 работающих потоков, окно "Потоки" (Отладка->Окна->Потоки) ничего не выводитОно пустое

218