Задать вопрос
@Snewer

Как хранить значения цен товаров в MySQL?

Здравствуйте!

В магазине имеется фиксированное кол-во товаров (порядка 200) и категорий (около 20). Пользователь может выставлять прайс лист на данные товары (т. е. каждый пользователь имеет свой прайс лист). При чем пользователь может выставлять цены не ко всем товарам, т. е. к примеру, для 1, 50, 80, 81.

Как организовать структуру таблицы? Выборка может быть следующая:
1. По id пользователя
2. "where value1 > 0 or value2 > 0 ...", где value1 и value2 - товар1 и товар2 соответственно

Как вариант таблица с 202 полями. Насколько это правильно?

Спасибо.
  • Вопрос задан
  • 2959 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Тестировщик на Python
    9 месяцев
    Далее
  • Академия Eduson
    Python-разработчик
    9 месяцев
    Далее
  • Merion Academy
    Базы данных с нуля
    2 месяца
    Далее
Решения вопроса 2
@neol
ИМХО правильнее будет как-то так:
CREATE TABLE `prices` (
  `user_id` int(10) unsigned NOT NULL,
  `goods_id` int(10) unsigned NOT NULL,
  `price` int(10) unsigned NOT NULL
);

Ну и индексы добавить.
Соответственно ваш запрос будет выглядеть примерно так:
SELECT * FROM prices WHERE goods_id IN (value1,value2) AND price > 0


Таблица с 202 полями - точно плохое решение (=
Ответ написан
@vdem
CREATE TABLE `User` (
    `user_id` int not null,
    ...
);
CREATE TABLE `Product` (
    `product_id` int not null,
    `product_name` varchar(100),
    ...
);
CREATE TABLE `UserPrice` (
    `user_price_id` int not null,
    `user_id` int not null,
    `product_id` int not null,
    `price` decimal(10, 2) not null,
    ...
);

Чтобы получить все товары, которые продает User с id = 10:
SELECT `Product`.*, `UserPrice`.`price`
FROM `UserPrice`
INNER JOIN `Product` ON `Product`.`product_id` = `UserPrice`.`product_id`
WHERE `user_id` = 10

Две таблицы (ну таблица с пользователями и так есть, верно?), и никаких сотен полей.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы