Структура таблицы заказов и товаров

sims

Guest
Структура таблицы заказов и товаров

Помогите пожалуйста решить такую задачу:

Пишем, например, систему заказов товаров по телефону:

т.е. у оператора открыто окно, со списком товаров напротив которых стоят чекбоксы. Пользователь говорит "хочу то, то и это". Оператор ставит напротив услуг галочки и нажимает "добавить". Всё, ничего сложного.

вопрос в том, как это удобнее хранить.

изначально я делал так:

таблица возможных услуг (меняется редко)
таблица в которой хранятся заказы клиентов
таблица в которой хрянятся "пожелания" клиентов

таблица "пожеланий" имеет структуру

-------------------------------
id
id_звонка_клиента (2я таблица)
id_товара (1я таблица)
-------------------------------

т.е. оператор ставит галочки

в таблицу заказов добавляется одна запись
в таблицу "пожеланий" столько записей, сколько галочек наставил оператор

идея, я надеюсь, понятна.
Для работы это вполне удобно:

получаем список записей, кликаем одну, там делается перекрёстный запрос к таблицам товаров и пожеланий, таким образом по id заказа получаем список заказанных товаров.

НО

когда форимируется отчёт для распечатки... это просто труба :)

на экране должно быть около 2000 записей (только за один месяц) при этом, в каждой строке-записи должен быть список товаров, т.е. в каждой из 2000 итерраций делаем ещё по запросу. итого 2000 запросов :-/ работает около 20 секунд, что есть очень долго.

Можно ли это дело как нибудь оптимизировать?

Сейчас передомной стоит похожая задача, как это лучше реализовать в ней? Не хочу допускать подобных ошибок.

я пришел к заключению что, лучше избавиться от таблиц товаров и таблиц пожеланий, и записать данные в массивы (данные меняются не часто) а списки товаров (вернее их индексы в массиве) хранить в строковом поле таблицы в формате ;16;4;15;1;25;. Но тогда будет не очень удобно делать отчёты по продажам определённых товаров (если такое понадобится вбудущем)

Объяснил как можно подробнее, жду от вес помощи!
 

tony2001

TeaM PHPClub
>Можно ли это дело как нибудь оптимизировать?
угу, вынуть все 1 запросом: джойнить все три таблицы.
 
Сверху