Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчёт наименований


vitv ©   (2006-12-17 12:20:00) 

Есть таблица в которой храняться наименования:
плита
холодильник
утюг
плита
холодильник
утюг
Нужно посчитать сколько  каждого наименовния.
Так можно:
create procedure my_proc returns(mytovar string,utug integer, plita integer......)
as
begin
for select tovar from table
into :mytovar
do
begin
if (mytovar='утюг') then utug=+1
....
....
....


Anatoly Podgoretsky   (2006-12-20 12:56:00) [1]

> VitV  (20.12.2006 12:43:10)  [10]

Читать книги по базам данных


VitV   (2006-12-20 12:43:00) [2]

Я сделал как вы советывали, просто мне интересно почему :). Я думал сделать так, но мне что то  подсказывало, что это "не есть гуд" :)))


VitV   (2006-12-20 12:29:00) [3]


> Никогда так не делаете (если ваш код кто-то когда-то может
> увидеть) и уж точно не советуйте так делать. Даже объяснять
> не буду почему - судя по всему, рано (или наоборот поздно)
>

Объясни, если не сложно.


Sergey13   (2006-12-18 10:12:00) [4]

> Я хочу сделать хранимой процедурой.

Если у тебя будет несколько сотен (тысяч) разных наименований - прикинь какова будет твоя процедура.
Тебе уже ответили в
> [1] sniknik ©   (17.12.06 13:42)


vitv   (2006-12-18 10:08:00) [5]


> я что то не могу понять ты чем пользуешься (таблица или
> массив)
>
> делается это так
>
> while not table1.eof do // пока не конец таблицы то...
> begin
> if table1.fieldbyname('tovar').asstring='utug' then utug:
> =utug+1;
> table1.next;
> end;
>
> в итоге тебе выведется количество твоих уьюгов.
> этот пример для делфяка (если ты конечно в нем пишишь :)
> )
>

Я хочу сделать хранимой процедурой.


Sergey Masloff   (2006-12-17 17:47:00) [6]

FIL-23 ©   (17.12.06 16:56) [5]
Никогда так не делаете (если ваш код кто-то когда-то может увидеть) и уж точно не советуйте так делать. Даже объяснять не буду почему - судя по всему, рано (или наоборот поздно)


FIL-23   (2006-12-17 16:56:00) [7]

я что то не могу понять ты чем пользуешься (таблица или массив)

делается это так

while not table1.eof do // пока не конец таблицы то...
begin
if table1.fieldbyname('tovar').asstring='utug' then utug:=utug+1;
table1.next;
end;

в итоге тебе выведется количество твоих уьюгов.
этот пример для делфяка (если ты конечно в нем пишишь :) )


vitv   (2006-12-17 16:01:00) [8]

Уже читаю :)


Плохиш   (2006-12-17 15:35:00) [9]


> VitV ©   (17.12.06 14:40) [2]

> ругается на синтаксис(Интербэйс 6.1)

Значит пора уже прочитать о синтаксисе используемой бд...


VitV   (2006-12-17 14:40:00) [10]

Сделал вот так:
select utug,count(utug) from tovary
group by utug
ругается на синтаксис(Интербэйс 6.1)


sniknik   (2006-12-17 13:42:00) [11]

SELECT наименования, Count(*) FROM Есть таблица
GROUP BY наименования

p.s. таблица неправильная, если уж так повторяются названия то делают 2 таблицы, одну справочник имен (в ней может быть не только имя но и др. информация по типу товара) и вторую непосредственно по товарам где вместо названий ссылки на них. т.е. например номер 1, или 2, 3 т.д. а в справочнике имен записи с id 1 соответствует "плита", 2 - "холодильник" и т.д.
полную инфу о записи тогда получают обьеденением этих таблиц. кроме того что база будет меньше размером это еще и быстрее работает... + при ошибке в названии исправлять придется только в одном месте.
поищи в общем статьи про нормализацию баз.


Наверх

Титульная страница Поиск, карта сайта Написать письмо