Russian Qt Forum

Qt => Базы данных => Тема начата: developer от Февраль 16, 2008, 11:59



Название: Срочно нужна помощь
Отправлено: developer от Февраль 16, 2008, 11:59
Здравствуйте, кто-нибудь помогите разобраться. Вообщем дело звучит так - есть небольшая база данных, одна таблица которой регистрирует входные заявки(припустим приходний ордер в бухгалтерии), будем называть ее zayavky . Приблизительная структура етой таблицы такова

id|NumberZayavky|DateZayavky|SumZayavky|

Где id - ето уникальный идентификатор заявки;
NumberZayavky  - ето внутренний номер заявки(например ПН12001) - задаеться пользователем;
DateZayavky  - ето дата ввода заявки - задаеться пользователем;
SumZayavky  - ето сума которая была проплачена по етой заявке;

Теперь вопрос ко всем кто возможно решал подобную задачу.
Мне нужно чтобы журнал некоторой программы (типа меню - "Заявки Приходные"), отображал только заявки датированные текущим месяцем и сумму подбивал только по текущим заявкам.Например, было несколько заявок в марте(10 штук) и апреле(15 штук), будем предполагать что текущий месяц апрель. Как грамотно и без глюков сделать так чтоби етот журнал отображал и подбивал сумму только по апрелевским заявкам. И как грамотно сделать доступ к мартовским заявкам, то-есть чтоби к ним тоже был доступ и можно было просмотреть сумму по всем мартовским заявкам.
И еще как сделать ефективний доступ к заявкам если ета таблица имеет заявки по всех месяцах года, а ето очень много записей.
Программирую на QT 4.3.3 open source.
MinGW 5....
Windows XP Proffesional SP1
MySql 5.0.47


Название: Re: Срочно нужна помощь
Отправлено: WW от Февраль 16, 2008, 12:39
Вообще-то, ту qt ни причем. Учить SQL. Без знания его - хоть Qt, хоть .NET тебе не помогут.
выбор из базы: select * from zajavky where DateZajavky between твояперваядата and твоявтораядата; ставишь первую дату 01.04.твойгод, вторую - 01.05.твойгод и имеешь свой апрель.
сумма select sum(SumZajavky) as mysum from zajavky where DateZajavky between твояперваядата and твоявтораядата;
интерфейс - это твой полет мысли. правда есть уже кое какие устоявшиеся правила. главное - чтобы пользователю было удобно.
Ну и напоследок: учиться, учиться и еще раз учиться!


Название: Re: Срочно нужна помощь
Отправлено: Tonal от Февраль 16, 2008, 13:24
Кроме between можно ещё использовать EXTRACT.
Тогда выражение ограничения для текушего месяца будет выглядеть так:
Код:
where extraxt(year from DateZajavky) = extraxt(year from current_date)
and extraxt(month from DateZajavky) = extraxt(month from current_date)


Название: Re: Срочно нужна помощь
Отправлено: Вячеслав от Февраль 17, 2008, 12:14
Кроме between можно ещё использовать EXTRACT.
Тогда выражение ограничения для текушего месяца будет выглядеть так:
Код:
where extraxt(year from DateZajavky) = extraxt(year from current_date)
and extraxt(month from DateZajavky) = extraxt(month from current_date)
1) 2 выражения вместо одного
2) 2*n+2 раз вычисляеться extract (n - число записей)
3) Забыли про индексы ....
Поправте плиз если я не прав .....
between по индексированому полю быстрее будет IMHO......

PS а еще в сторону ORDER BY и GROUP BY рекомендуеться посмотреть ....


Название: Re: Срочно нужна помощь
Отправлено: developer от Февраль 18, 2008, 17:34
Ребята спасибо за хорошие советы  :).