Giter VIP home page Giter VIP logo

sql-tree-structure's Introduction

sql-tree-structure

Задача

  • Товары на сайт интернет-магазина сгруппированы по категориям.
  • Категории организованы в древовидную структуру с уровнем вложенности до 4 включительно.
  • Значимые атрибуты категории: название.
  • Значимые атрибуты товара: название и цена.
  • Один продукт может относиться к нескольким категориям.
  1. Разработать структуру базы данных MySQL для хранения дерева категорий, списка продуктов и информации о принадлежности продуктов к категориям.
  2. Заполнить таблицы тестовыми данными.
  3. Написать SQL-запросы для получения следующих данных: a. Для заданного списка товаров получить названия всех категорий, в которых представлены товары; b. Для заданной категории получить список предложений всех товаров из этой категории и ее дочерних категорий; c. Для заданного списка категорий получить количество предложений товаров в каждой категории; d. Для заданного списка категорий получить общее количество уникальных предложений товара; e. Для заданной категории получить ее полный путь в дереве (breadcrumb, «хлебные крошки»).

Решение

Выбрана схема "Вложенное множество" (Nested Set), которая хорошо подходит по скорости и оптимальности запросов в контексте данной задачи. Предоставлено изображение дерева категорий для удобства. Оптимизация запросов производится за счет выполенния всех операций в один запрос без использвоания подзапросов.

a. Для заданного списка товаров получить названия всех категорий, в которых представлены товары;

SELECT DISTINCT name FROM category AS c
LEFT JOIN product_to_category AS ptc on (ptc.category_id = c.id)
WHERE ptc.product_id IN (2,9,21,32,40,51)

b. Для заданной категории получить список предложений всех товаров из этой категории и ее дочерних категорий;

SELECT DISTINCT p.* FROM category AS c
LEFT JOIN product_to_category AS ptc ON (ptc.category_id = c.id)
LEFT JOIN product AS p ON (ptc.product_id = p.id)
WHERE c.lft BETWEEN 2 AND 15

c. Для заданного списка категорий получить количество предложений товаров в каждой категории;

SELECT COUNT(product_id) AS products_in_category, category_id FROM product_to_category
WHERE category_id IN (2, 6, 10, 14, 19, 26) GROUP BY category_id

d. Для заданного списка категорий получить общее количество уникальных предложений товара;

SELECT COUNT(DISTINCT product_id) FROM `product_to_category` WHERE `category_id` in (1,6,17,16)

e. Для заданной категории получить ее полный путь в дереве (breadcrumb, «хлебные крошки»).

SELECT * FROM category WHERE lft < 5 AND rgt > 6 ORDER BY lft ASC

sql-tree-structure's People

Contributors

bagriydmitriy avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.