- •Введение
- •1. Основные понятия
- •1.1 Что такое реляционная база данных
- •1.2 Что такое sql
- •1.3 Что такое cms
- •1.4 Основные функции cms
- •1.5 Интернет-магазин
- •1.6 Что такое сервер MySql
- •1.7 Типы данных MySql
- •1.7.1 Числовые типы данных
- •1.7.2 Строковые типы данных
- •1.7.3 Календарные типы данных
- •2. Проектирование и создание базы данных
- •2.1 Таблица категорий товара
- •2.2 Таблица покупателей
- •2.3 Таблица способов доставки
- •2.4 Таблица товаров
- •2.5 Таблица заказов
- •2.6 Таблица заказанных товаров
- •2.7 Итоги создания базы данных
- •3. Разработка sql выборок данных из бд
- •3.1. Выборка таблицы категорий
- •3.2. Выборка всех товаров определенной категории
- •Заключение
- •Список литературы
3. Разработка sql выборок данных из бд
3.1. Выборка таблицы категорий
После создание базы данных у нас стоит немаловажная задача, написать SQL запрос, который будет доставать нужные данные из нашей БД. Мы будем составлять запросы по такому же порядку, как создавали нашу БД. Первый делом нам нужно написать запрос, который вытащит из нашей БД все категории товаров. Проговорим подробно задачу: нам нужно выбрать поля cat_id, cat_name, parent_id из таблицы cat и сортировать эти данные сначала по полю parent_id, потом по полю cat_name. Все очень просто, грубо говоря мы уже составили запрос осталось только написать его в синтаксисе SQL:
SELECT cat_id, cat_name, parent_id FROM cat ORDER BY parent_id, cat_name;
Выборка таблицы категорий
Таким образом, мы получили из нашей базы данных список всех категорий отсортированных по полям parent_id, cat_name.
3.2. Выборка всех товаров определенной категории
Выборка товаров определенной категории имеет не самый тривиальный запрос. По задумке нашего интернет-магазина мы не можем добавлять товар в категорию, которая имеет дочерние категории и тем не менее при выборке всех товаров с предикатом родительской категории мы должны получить все товары дочерних категорий, которые относятся к данной категории. Запрос будет состоять из 2 подзапросов. Первый подзапрос будет выбирать из таблицы goods все товары где goods_brandid = КЛЮЧ_КАТЕГОРИИ и товар не скрыт на сайте. Второй подзапрос будет немного сложнее, он будет иметь вложенный запрос. Это нужно для того чтобы выбрать все товары дочерних категорий. Потом мы возьмем эти два подзапроса и объединим оператором UNION. В конечном итоге мы получим универсальный запрос который будет выбирать все товары конкретной категории, и если категория родительская, то он будет выбирать все товары всех дочерних подкатегорий.
SQL:
(SELECT goods_id, name, img, anons, price, hits, new, sale, date FROM goods WHERE goods_brandid = $category AND visible='1')
UNION
(SELECT goods_id, name, img, anons, price, hits, new, sale, date FROM goods WHERE goods_brandid IN (SELECT brand_id FROM brands WHERE parent_id = $category) AND visible='1')
$category – это ключ выбираемой категории.
На самом деле тут все очень просто, если $category родительская, то первый подзапрос вернет нам пустой результат, а второй подзапрос вернет нам все товары из подкатегории где, parent_id = $category (родитель подкатегории = категории).
Заключение
Мы закрепили изучаемый материал по дисциплине «Информационные ресурсы и системы. Базы данных». Повторили весь материал и сделали самостоятельную практическую часть. Мы разработали нормализированную базу данных для стандартного интернет магазина. При разработке БД, мы придерживались, правилам так называемых «нормальных форм», тем самым разработали правильную структуру БД. Также мы продемонстрировали широкое использование реляционной модели базы данных и работали с сервером MySQL и СУБД phpMyAdmin. В итоге проектирование и разработке мы получили базу данных из 7 таблиц. После проектирования и разработки нашей базы данных интернет-магазина, мы закрепили наши знания по языку программирования запросов к базе данных SQL и разобрали несколько нестандартных запросов и показали наиболее оптимальное решение одной нетривиальной задачи выборки данных из БД.
