Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2009, 05:39   #1
DelphiQuestions
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 19
По умолчанию Нужна помощь с SQL запросом

Доброго времени суток , собственно проблема заключается в следующем ,существуют 2 таблицы в одной хранится список пользователей во второй найминование книг между ними связь мастер деталь.Пользователи мастер ,книги деталь при помощи запроса я осуществляю поиск по пользователям нахожу его информацию. внимание вопрос каким образом используя еще один запрос осуществить некую связь мастер-деталь чтоб при нажатии на найденого пользователя (группы пользователей) получить перечень книг которые к нему(ним) присвоены
собственно код которым ищу пользователя
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if rg1.ItemIndex=0 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(fam=:pFam)');
dm.q1.prepare;
dm.q1.parambyname('pFam').asstring:=edit1.text;
dm.Q1.Open;
end
else
if rg1.ItemIndex=1 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(studbilet=:pstudb)');
dm.q1.prepare;
dm.q1.parambyname('pstudb').asstring:=edit1.text;
dm.Q1.Open
end
else
if rg1.ItemIndex=2 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(grupa=:pgrup)');
dm.q1.prepare;
dm.q1.parambyname('pgrup').asstring:=edit1.text;
dm.Q1.Open end;
if rg1.itemindex=-1 then
showmessage('âûáåðèòå êðèòåðèé äëÿ ïîèñêà');

Последний раз редактировалось DelphiQuestions; 22.12.2009 в 05:41.
DelphiQuestions вне форума Ответить с цитированием
Старый 22.12.2009, 17:46   #2
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Схематически это выглядит так:

Код:
SELECT * from Таблица книг WHERE knigatable.id=уникальный_идентификатор_найденого_пользователя
Хочешь нормальный запрос - дай структуру БД, а то не понятно немного!
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 22.12.2009, 20:38   #3
DelphiQuestions
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 19
По умолчанию

Бд Iterbase

Таблица Пользователей (sstud)

Kod-Первичный ключ

Таблица Справочник Книг (sknigi)

kod-Первичный ключ
Idstud-Поле по которому осуществлена связь мастер деталь

Kod из (sstud) мастер Idstud из (sknigi) деталь

необходимо выводить книги которые соответствуют пользователю
написал следуйший код
Код:
if rg1.ItemIndex<>-1 then begin
dm.Q2.Close;
dm.Q2.SQL.Clear;
dm.Q2.SQL.add('select imknigi from sstud,SKNIGI');
dm.Q2.SQL.add('where(idstud=sstud.kod)');
dm.Q2.Open; end;
логика такая если выбрана хоть одно значение из радио групп то производим поиск книг соответствующих пользователю необходимы
только те у которых поле kod таблицы sstud будет равно полю idstud таблицы sknigi

проблема в том что выше приведенный код выводить весь перечень книг
без учета сравнения поля kod и sstud
DelphiQuestions вне форума Ответить с цитированием
Старый 22.12.2009, 21:17   #4
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Связь один ко многим. По твоей задумке будет избыточность. Студент может взять несколько книг. Необходимо создать еще таблицу в которой ты будешь хранить взятые книги студентом (id, studentid, bookid).
students(studentid, name)
books(bookid, name)
studentBooks(id, studentid, bookid)

Например вывожу книги которые взял Евгений:
Код:
SELECT st.name, b.name
FROM (SELECT s.name, sb.bookid
          FROM students AS s
                     INNER JOIN
                   studentBooks AS sb
                   ON s.studentid = sb.studentid
          WHERE s.name = 'Евгений') AS st
             INNER JOIN
          books AS b
ON st.bookid  = b.bookid 
--WHERE b.name = 'Золушка'
Evgeniy26 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с SQL запросом! yoolla SQL, базы данных 9 31.07.2009 23:54
Нужна помощь с запросом! rocker PHP 1 22.03.2009 13:15
Нужна помощь с SQL MaskEdit БД в Delphi 8 13.01.2009 17:00
Нужна помощь с SQL запросом Worms БД в Delphi 3 14.03.2008 12:43