![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Гриша |
|
|||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Здравствуйте.
Для интернет-магазина, мне необходимо разработать структуру таблиц, содержащих информацию о скидках на товары, для последующего расчета цены товара с учетом скидки. :: Цена товара завист от различных опций, цвет, размер и т. д., поэтому один товар может иметь несколько цен. Теоритические, пока что представляется так: 1) Скидка может быть установлена например только для партнера (partner_id), т.е. она будет действительна для всех категорий и товаров данного партнера. 2) Скидка может быть установлена например для партнера и категории товаров (partner_id, category_id), т.е. она будет действительная для всех товаров данного партнера и категории. 3) Скидка может быть установлена для партнера, категории товара и выбранных товаров (artner_id, category_id, product_id), т.е. она будет действительная для всех выбранных товаров данного партнера и категории.
Практических идей никаких даже не получается, начинаю пытаться сделать на бумаге, и просто незнаю даже с чего начать, ничего невыходит. --------------------
Если долго мучиться, что-нибудь получитЬся. |
|||
|
||||
| Igor_CH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 20.3.2005 Репутация: нет Всего: нет |
Может так:
Таблица скидка partner_id | category_id | product_id | скидка -10 -100 -10% (если отнимать в прцентах) |
|||
|
||||
| Гриша |
|
|||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Igor_CH, спасибо за ответ.
Я также начал когда писать таблицу, потом смотрю и никак, непойму как правильно объеденить такую таблицу с таблицой товаров (PRODUCTS), и как сделать так, что если я указал, только partner_id, то category_id и product_id должен быть любые, что у меня в итоге получается при объеденение, помойму ничего хорошего. Так меня в ступор вогнал поиск решения это задачи. --------------------
Если долго мучиться, что-нибудь получитЬся. |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
Гриша, делай так
если ячейка в таблице скидок NULL - то любые. то есть. partner_id | category_id | product_id | скидка 1 | NULL | NULL - скидка для всего партнеру 1 | 1 | NULL - скидка для всей категории этому партнеру NULL | NULL | 1 - скидка на товар |
|||
|
||||
| Гриша |
|
|||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Vaulter, спасибо за ответ.
Но каую бы структуру я непридумывал, объеденить ее с таблицей товаров и извлеч нужную скидку никак неполучается. Вот к примеру есть такой запрос на извлечение товаров:
А вот как же составить запрос, чтобы извлеч и скидку? --------------------
Если долго мучиться, что-нибудь получитЬся. |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
SELECT
* # Перечесляю нужные поля FROM products LEFT JOIN categories on products.category_id = categories.category_id LEFT JOIN prices on products.product_id = prices.product_id LEFT JOIN photos on products.product_id = photos.product_id LEFT JOIN discount on discount.category_id = products.category_id OR discount.product_id = products.product_id # Объеденение левостороннее, потому что фотографий для товара может не быть WHERE # Условия, сортировка смотря какая логика. |
|||
|
||||
| Гриша |
|
||||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Vaulter, спасибо большое за ответ.
Я совсем забыл про то что при объеденение LEFT JOIN я могу, укзывать OR, AND. Таблицы со скидками делаю так: D
Соответвенно общий заппрос получается такой:
В итоге получается, что если есть скидка на партнера (имеет больший приоритет в моем случае), значит остальные не проверяем, и т.д. Быстренько проверил, пока все работает. Спасибо вам большое за помощь. Возможно вы мне сможете подсказать, насколько запрос такого рода может быть тяжелым для БД, опыта я не имею вобщем-то, поэтому незнаю запросы такого рода, с большим количество LEF JOIN, загружают БД? --------------------
Если долго мучиться, что-нибудь получитЬся. |
||||
|
|||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
Гриша,
меньше чем какие либо другие варианты. |
|||
|
||||
| Garret |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 16.9.2006 Где: Киев Репутация: 1 Всего: 2 |
Загружает конкретно(4 джойна 0_О).
|
|||
|
||||
| Гриша |
|
|||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Спасибо всем за ответы.
Garret, немогли бы вы пояснить 4 джойна 0_О. Я например когда просматриваю разные сайты, мне думается что у них нет всяких сложных запросов, что они как-то все просто оптимизируют. Мне несчем сравнить, и поэтому я весь в сомнениях. Хотя бывает читаю, что где-то и по 100 запросов на странице бывает (но так же уточняется что они простые). Но случай со скидками ведь я предполагаю, что во многих случаях варианты схожи с моим, занчит это нормально? --------------------
Если долго мучиться, что-нибудь получитЬся. |
|||
|
||||
| Garret |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 16.9.2006 Где: Киев Репутация: 1 Всего: 2 |
Гриша, имел ввиду что 4 джойна это многовато, запрос будет тормозной. Я стараюсь использовать максимум 2 джойна.
|
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
Garret,
а если надо? |
|||
|
||||
| Гриша |
|
|||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Спасибо за ответы.
И запрос такой нужен, и чтобы небольшая нагрузка была ) Попробю поэксперементировать с кэшированием. --------------------
Если долго мучиться, что-нибудь получитЬся. |
|||
|
||||
| Гриша |
|
||||||
![]() НУС(незнаю|узнаю|создаю) ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 12.6.2005 Где: Земля, Москва, Хр ущевка Репутация: нет Всего: 1 |
Решил разделить описанный выше запрос на несколько меньших:
1) Один извлекает данные товаров 2) Второй извлекает ИД фотографий для товаров 3) Третий извлекает цену и скидку, для товаров Третий запрос использует следующие таблицы:
SQL запроса:
EXPLAIN:
При описании запроса видно, что таблица Products и таблица discounts просматриваются полностью. Я полагал, что таблица discounts будет использовать индексы и полностью не будет просмтариваться. В результате получается, что если в таблице products будет 1000 строк, а в таблице discounts будет 10 строк, то всего MySQL потребуется просмотреть 10*1000=10000 строк и т.д. Прошу совета по оптимизации/составлению запроса. Это сообщение отредактировал(а) Гриша - 4.10.2006, 18:50 --------------------
Если долго мучиться, что-нибудь получитЬся. |
||||||
|
|||||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
зачем делаешь "products.product_id IN(0,5,7,8,9,10,15,13)"? почему не равенство?
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |