• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Базы данных.

Xpycm

Участник форума
Регистрация
6 Янв 2008
Сообщения
2.257
Благодарности
25
Баллы
245
Задали мне задание по БД. Помогите, кто шарит.
В общем так: есть БД пункта видеопроката. Есть в ней таблица, с датой выдачи диска, названием фильма и др., для задания неважными полями.
В общем, нужно вывести список фильмов, которые не были заказаны в 2009 году. Как реализовать такое условие?

У меня есть кой-какие мыслишки, но не буду их говорить пока, чтобы не сбивать с мысли вас.
 

Shepart

Участник форума
Регистрация
7 Фев 2009
Сообщения
219
Благодарности
2
Баллы
170
если это в Паскале то я по моему знаю как это реализовать с помощью записей... :-\

типа
ProgramLost;
type prokat=record
data:integer;
name:string;
*********
end;

var s:array[1..5] of prokat;
begin
*********
for i:=1 to n do
begin
********
end;

for i:=1 to n do
if (s.data<>2009) then begin
Writeln('Фильм:',S.name);

writeln('Год',S.data);
**********

end.


типа так, описать подробно?
или ты вообще про Microsoft Access??? :)
 
Последнее редактирование модератором:

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
914
Баллы
385
Код:
SELECT * FROM PROKAT
WHERE YEAR(PROKAT_DATE) <>2009

Синтаксис примерный и зависит от конкретной БД, нужно читать мануалы по функциям и синтаксису твоей БД.
 
Последнее редактирование модератором:

Xpycm

Участник форума
Регистрация
6 Янв 2008
Сообщения
2.257
Благодарности
25
Баллы
245
Shepart
если это в Паскале то я по моему знаю как это реализовать с помощью записей...
Нет, надо на SQL.
или ты вообще про Microsoft Access???
Да, Аксесс, но это неважно.

marazmus
SELECT * FROM PROKAT
WHERE YEAR(PROKAT_DATE) <>2009
Нет, я так пробовал уже. Нужно выбрать фильмы, которые не были заказаны в 2009, т.е. если фильм был заказан и в 2008 и в 2009, то он не должен попасть в таблицу. А с таким кодом попадет.
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
SQL не знаю, и не знаю, можно или нет реализовать, такой примерный алгоритм… :-\ но всё равно выскажусь вдруг поможет… ;)
Примерно так:
Там же в базе данных стоит отметка, заказывался ли диск или нет…
Значит можно сделать примерно так IF() если диск заказывался (вне зависимости, от года 2008-2009) то заносить его в массив, если нет, то в другой массив, ну, а после, эти массивы распихать по разным БД… ну или в один массив заносить только не заказанные диски…от этого суть не меняется.
 

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
914
Баллы
385
Xpycm написал(а):
Shepart
если это в Паскале то я по моему знаю как это реализовать с помощью записей...
Нет, надо на SQL.
или ты вообще про Microsoft Access???
Да, Аксесс, но это неважно.

marazmus
SELECT * FROM PROKAT
WHERE YEAR(PROKAT_DATE) <>2009
Нет, я так пробовал уже. Нужно выбрать фильмы, которые не были заказаны в 2009, т.е. если фильм был заказан и в 2008 и в 2009, то он не должен попасть в таблицу. А с таким кодом попадет.

Тогда приведи точную структуру БД. Без структуры получается разговор слепого с глухим.
 
Последнее редактирование модератором:

Xpycm

Участник форума
Регистрация
6 Янв 2008
Сообщения
2.257
Благодарности
25
Баллы
245
Спасибо всем, кто пытался помочь, я все сделал. Не без помощи, канеш, но сделал.
Тогда приведи точную структуру БД.
Структура примерно такая:
Таблицы
Поля
Фильм:
Название
Выданные_диски:
название_фильма
Дата_выдачи

Остальные таблицы не важны.
Если кому интересно, то реализовалось все с помощью вложенного запроса: фильтруем "выданные_диски", выбираем оттуда фильмы, которые были заказаны в 2009 году; вставляем этот фильтр в фильм.название и добавляем not in. Получаем трубемое: по запросу выводится список фильмов, которые не были заказаны в этом году.
Код запроса вот такой получился:
Код:
SELECT Фильм.Название
FROM Фильм
WHERE (((Фильм.Название) Not In (SELECT Выданные_диски.Фильм
FROM Выданные_диски
WHERE (((Year([дата_выдачи]))=2009));)));
 
Последнее редактирование модератором:
Сверху Снизу