Структура таблиц.

cDLEON

Онанист РНРСlub
Структура таблиц.

Что то я совсем запрограммился.
Ни фига не получается выдумать толковую структуру таблиц...
Описываю задачу (вернее то, как у меня сейчас реализовано):
Имеем таблицу, в которой хранятся директории.
В каждой директории может существовать переменное количество тарифов со своими настройками.
Каждый тариф может использывать определённую систему оплаты.
Требуется получить:
1) Задействованные системы оплаты.
2) ИД тарифов, название тарифов, для текущей системы оплаты. (Выбранной пользователем)
3) Все данные по выбранному пользователем тарифу.
4) При чём:
а) Если не верна(либо не введена) введённая пользователем система оплаты:
Выводим самую первую попавшуюся.
б) Если не верен (либо не введён) введённый пользователем тариф
Выводим самый первый попавшийся.
+ К этому всему не забываем, что к директории добавляется не система оплаты, а сразу тариф использующий определённую систему оплаты.
 

phpdev2007

Новичок
cDLEON
не спите дальше, старайтесь не спать вообще, и добавляйте в описания вашего задания побольше абстракций, и вы решите эту задачу минимум за год :)
 

cDLEON

Онанист РНРСlub
phpdev2007
Ну задачу я решил уже. Только решил, мне кажется, кривовато.
Я извлекаю из БД ВСЕ тарифы для данной директории.
И уже с ними произвожу сортировку вручную. При чём код получился в строк 15 =).

-~{}~ 16.12.07 09:32:

Но здесь на лицо лишняя работа. Ведь в итоге то мне нужны тарифы только для одной системы оплаты, а у меня получается, что извлекаются все...
 

cDLEON

Онанист РНРСlub
[sql]CREATE TABLE `tarifs` (
`id` int(11) NOT NULL auto_increment,
`systemName` varchar(100) NOT NULL,
`dirId` int(11) NOT NULL,
`serviceName` varchar(100) NOT NULL,
`purses` text NOT NULL,
`requestCount` int(11) NOT NULL,
`timelimit` int(11) NOT NULL,
`limitDls` int(11) NOT NULL,
`dlSpeedLimit` int(11) NOT NULL,
`kcaptcha` varchar(1) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `dirId` (`dirId`),
KEY `systemName` (`systemName`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
CREATE TABLE `paySystems` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) NOT NULL,
`psw` varchar(32) default '0',
`default` varchar(1) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
[/sql]
 

Bitterman

Новичок
Честно говоря, не понял, как связаны система оплаты и тарифы. Через systemName, что ли?
 

cDLEON

Онанист РНРСlub
На данный момент да.
Подобного функционала ни кто не осуществлял.
Поэтому интерфейс и проч. придумывался на ходу. Не предполагалось, что мне нужно будет делать селект по имени системы. Но это меняется быстро...
Мне б какой алгоритм толковый придумать....
А оптимизацией вот таких ляпов я планирую позже заняться..,Когда все точки над Ы расставлю...
 

Bitterman

Новичок
А нельзя поменять интерфейс так, чтобы пользователь не мог ввести несуществующую или неправильную систему оплаты и тариф? Проще говоря, поставить селекты со всеми возможными значениями? Тогда и проблема с 4 пунктом будет решена. Ведь, насколько я понимаю, проблемы возникают именно с ним?
 

cDLEON

Онанист РНРСlub
Угу...Ну это я уже немного заморачиваюсь...
Вообще там селект. Но я для удобства сохраняю значение в сессии, и если после сохранения - удалить тариф, либо систему оплаты, получается, что юзверю, как минимум, нужно закрыть окно с моим сайтом. Что не очень хотелось бы...
 

Bitterman

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