Скрипт читает БД и выводит общую таблицу по всем товарам и продавцам
seller | product | price | count
SELECT *
FROM `price_list__ordered_by_product`;
используется VIEW `price_list__ordered_by_product`
2. Пользователь выбирает подходящего продавца, кликает на его имя и переходит на страницу seller.php
Скрипт читает БД и выводит таблицу по всем товарам продавца
product | price | in_stock_count
SELECT
`name` AS `product`,
`product_price` AS `price`,
`product_count` AS `in_stock_count`
FROM `names`
LEFT JOIN `products` ON `product_name_id` = `name_id`
LEFT JOIN `users` ON `user_id` = `product_user_id`
WHERE `user_id` = '1'
ORDER BY `price`;
здесь id выбранного продавца
Скрипт рисует карточки к выбранным товарам с двумя полями: dicount | count
Пользователь вводит количество нужного товара в count
Пользователь выбирает вариант дисконта из выпадающего списка
Создается сделка deal - автоматически присваивается deal_id
INSERT INTO `deals` (`deal_time`, `deal_is_accepted`)
VALUES (current_timestamp(), NULL);
здесь id выбранного продавца
Код получения deal_id на PHP
Скрипт рисует кнопку [отправить]
Методом GET передаём *.php?dial=1 - передали id сделки, здесь это 1
Поскольку проект учебный, все запросы реализованы через GET.
3. Пользователь нажал [отправить], переход на propose_add.php
Скрипт создает запрос к БД
1. Создаёт propose в proposes
propose_id - здесь это 1. Генерирует БД
записать propose_user_id - user_id покупателя
запиcать propose_deal_id - deal_id сделки из пункта 2 (предыдущее действие по сценарию)
запиcать propose_round - какое по счёту предложение в цепочке. Сначала 1
INSERT INTO `proposes` (`propose_deal_id`, `propose_user_id`, `propose_round`)
VALUES ('1', '3', '1');
2а. Создаёт cart для 1 продукта
cart_id - сгенерирован автоматом
cart_discount_id = id_ дисконта
cart_product_id = id_продукта_1
cart_amount = количество продукта
cart_propose_id = id предложения для быстрой идентификации предложения
cart_deal_id = id сделки для быстрой идентификации сделки
propose_cart_propose_id - id предложения один на обе cart
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('1', '1');
propose_cart_cart_id - cart_id второй cart
propose_cart_propose_id - id предложения один на обе cart
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('2', '1');
Генерация ссылки propose_ID продавцу для отправки, например, через мессенджер в виде site_name?dial=1&propose=1
4. Продавец открыл ссылку, где есть propose_id propose_read.php
Скрипт читает данные из БД
propose_user_id из proposes (по propose_id)
propose_cart_cart_id из proposes_carts по propose_id
cart_product_id, cart_discount_id, cart_amount из carts
product_price из products
product_name из names
SELECT `propose_id`,
`propose_user_id` AS `proposer_id`,
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '1';
Скрипт генерирует таблицу:
propose_id | proposer_id | seller | product | stock_price | propose_price | in_stock_count | propose_count | propose_dicount | total_price
плюс генерирует карточки с двумя полями для предложения продавца: discount | count
Продавец вводит количество товара, который готов отгрузить в count
Продавец выбирает вариант дисконта из выпадающего списка в discount
propose_cart_propose_id - id предложения один на обе cart, уже 2
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('3', '2');
propose_cart_cart_id - cart_id второй cart
cart_id - в данном случае это 4
propose_cart_propose_id - id предложения один на обе cart, уже 2
INSERT INTO `proposes_carts` (`propose_cart_cart_id`, `propose_cart_propose_id`)
VALUES ('4', '2');
Скрипт генерирует ссылку с propose_ID для отправки покупателю, например, через мессенджер в виде site_name?dial=1&propose=2
6. Покупатель открыл ссылку, где есть propose_id = 2, переход на propose_read.php
Скрипт читает данные из БД:
propose_user_id из proposes (по propose_id)
propose_cart_cart_id из proposes_carts по propose_id
cart_product_id, cart_discount_id, cart_amount из carts
product_price из products
product_name из names
SELECT `propose_id`,
`propose_user_id` AS `proposer_id`,
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
/*LEFT JOIN `usertypes` ON `usertype_id` = `user_usertype_id`*/
WHERE `propose_id` = '2' AND `propose_deal_id` = '1';
это новое предложение!
SELECT `propose_id`,
`propose_user_id` AS `proposer_id`,
`user_name` AS `seller`,
`name` AS `product`,
`product_price` AS `stock_price`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`product_count` AS `in_stock_count`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '1' AND `propose_deal_id` = '1';
это предыдущее предложение!
SELECT `propose_round`,
`usertype_name` AS `seller_customer`,
`name` AS `product`,
`product_price` AS `stock_price`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `propose_price`,
`cart_amount` AS `propose_count`,
`discount_amount` AS `propose_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `propose_user_id` = `user_id`
LEFT JOIN `usertypes` ON `usertype_id` = `user_usertype_id`
WHERE `propose_deal_id` = '1'
ORDER BY `propose_time`;
вся цепочка предложений
Скрипт получает таблицу:
propose_id | proposer_id | seller | product | stock_price | propose_price | in_stock_count | propose_count | propose_dicount | total_price
и рисует две карточки для предложения продавца: discount | count
Покупатель вводит количество товара, который ему необходим в count
Покупатель выбирает вариант дисконта из выпадающего списка в discount
SELECT `user_name` AS `seller`,
`name` AS `product`,
FLOOR(`product_price` - `product_price` / 100 * `discount_amount`) AS `deal_price`,
`cart_amount` AS `deal_count`,
`discount_amount` AS `deal_discount`,
FLOOR((`product_price` * `cart_amount`) - `product_price` * `cart_amount` / 100 * `discount_amount`) AS `deal_total_price`
FROM `proposes`
LEFT JOIN `proposes_carts` ON `propose_id` = `propose_cart_propose_id`
LEFT JOIN `carts` ON `cart_id` = `propose_cart_cart_id`
LEFT JOIN `discounts` ON `discount_id` = `cart_discount_id`
LEFT JOIN `products` ON `product_id` = `cart_product_id`
LEFT JOIN `names` ON `name_id` = `product_name_id`
LEFT JOIN `users` ON `product_user_id` = `user_id`
WHERE `propose_id` = '4' AND `propose_deal_id` = '1';