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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2009, 16:08   #1
chekanoff
Пользователь
 
Аватар для chekanoff
 
Регистрация: 13.11.2007
Сообщений: 81
По умолчанию отображаются несколько записей

Доброго времени суток!
пропблема в следующем: на форме две таблицы, они связаны между собой (1 - паспортные данные 2 - книги на руках)
книг на руках может быть много, а значит связь 1 к многим! пишу запрос
Код:
select * from FIO, Knigi where FIO.ID=Knigi.IDID
при этом елси у человека несколько книг, то фамилия отображается в таблице столько раз сколько у него книг(((( как от этого избавиться, это же не правильное отображение для пользователя((((?
спасибо за ответ)))
Лучшее образование - самообразование (В.Пикуль)
chekanoff вне форума Ответить с цитированием
Старый 16.09.2009, 16:15   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Структуру таблиц и результат, который тебе нужен опиши - тогда будем разговаривать. ))
А по твоему запросу он все правильно делает - берет FIO.* а потом к ним добавляет все совпавшие Knigi.*
FIO1: KNIGA1
_____ KNIGA2
FIO2: KNIGA1
FIO3:....
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 16.09.2009 в 16:19.
SuperVisor вне форума Ответить с цитированием
Старый 16.09.2009, 16:32   #3
chekanoff
Пользователь
 
Аватар для chekanoff
 
Регистрация: 13.11.2007
Сообщений: 81
По умолчанию

таблица FIO
поля ID, Fam, Imja
таблица Knigi
поля IDID, Kniga
FIO.ID связано с Knigi.IDID

запрос должен выдавать список фамилий без повторов если у них есть по несколько книг! к примеру 3 человека взяли 10 книг одного автора, Иванов взял 4 книги, Петров - 1 и Сидоров - 5 ! мне нужно отобразить в 1 таблице список из 3 фамилий Иванов, Петров, Сидоров, при этом во 2-ой таблице показать при наведении курсора на Иванова его 4 книги, на Петрова - 1 и на Сидорова тоже 5! вот такая витиеватая задача(((
Лучшее образование - самообразование (В.Пикуль)

Последний раз редактировалось chekanoff; 16.09.2009 в 16:34.
chekanoff вне форума Ответить с цитированием
Старый 16.09.2009, 17:56   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Цитата:
Сообщение от chekanoff Посмотреть сообщение
таблица FIO
поля ID, Fam, Imja
таблица Knigi
поля IDID, Kniga
FIO.ID связано с Knigi.IDID

запрос должен выдавать список фамилий без повторов если у них есть по несколько книг! к примеру 3 человека взяли 10 книг одного автора, Иванов взял 4 книги, Петров - 1 и Сидоров - 5 ! мне нужно отобразить в 1 таблице список из 3 фамилий Иванов, Петров, Сидоров, при этом во 2-ой таблице показать при наведении курсора на Иванова его 4 книги, на Петрова - 1 и на Сидорова тоже 5! вот такая витиеватая задача(((
Мой вам совет прочесть основные понятия реляционных моделей данных, потому что данная структура никуда не годиться и она является очень простой, поэтому прочтите свою подпись и вперед, в интернете навалом литературы, глубоко лезть не надо.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 16.09.2009, 18:27   #5
chekanoff
Пользователь
 
Аватар для chekanoff
 
Регистрация: 13.11.2007
Сообщений: 81
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
данная структура никуда не годиться и она является очень простой
вот в том и дело что она очень проста (это пример, полей и таблиц на много больше, но решив эту задачу все остальное уложиться как нужно), да будет избыточность данных, и сия БД не будет приведена к 3НФ, но мне нужно решить именно эту задачу! но за совет спасибо, читаю уже 2-ой день, чую что все просто но ответ не лезет в голову, а время жмет((( просто думал для этого и нужны формумы!
Лучшее образование - самообразование (В.Пикуль)

Последний раз редактировалось chekanoff; 16.09.2009 в 18:33.
chekanoff вне форума Ответить с цитированием
Старый 16.09.2009, 18:49   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

chekanoff, ну про образование (и самообразование) — это абсолютно верно! Это обязательное условие! и, кстати, основы SQL просто великолепно расскрыты в книжке Мартина Грубера "Понимание SQL" (лёгко найдёте в литературе к разделу или в интернете).

по Вашему вопросу.
Смотрите, фактически Вам надо получить (или получать "налету" две таблицы - первую - список читателей, у который на руках есть книги.
Это можно получить, сгруппировав Ваш запрос по читателям. вторая таблица - список книг по конкретному читателю (или таблица "с повторами" фамилий читателей по каждой книге)

но проблема в том, что СТРУКТУРА ВАШИХ ТАБЛИЦ НИКУДА НЕ ГОДИТСЯ!
Понять Вам самому будет очень легко.
Заполните таблицы данными (прямо в редакторе Word нарисуйте примеры таблиц и заполните их).
И Вы сами увидите, что Вам прийдётся несколько раз внести одного читателя, если у него на руках несколько книг!!!
Решается эта ситуация через промежуточную таблицу.
Например, предлагаю такую схему:
Таблица. ЧИТАТЕЛИID читателя - ключевое поле (ОБЯЗАТЕЛЬНО!)
FAM
IM
OT
НомерЧитательскогоБилета (это тоже желательно, т.к. могут быть полные тёзки!)
так же могут быть другие поля, необходимые для работы с читателем, например, телефон, дом.адрес, паспортные данные и т.д. и т.п.

Таблица. КНИГИ
ID книги - ключевое поле (ОБЯЗАТЕЛЬНО!)
Название книги
Автор(ы)
Год выпуска
Издательство
количество_страниц
ISBN
и прочее (всё, что может понадобиться для библиотечной картотеки)

Таблица. ВЫДАННЫЕ_КНИГИ
ID записи - ключевое поле (в данной таблице ключ необязателен... можно сделать, можно - не делать.. хотя по науке - надо)
ID читателя
ID книги
Дата выдачи.
Запланированная дата возврата книги (когда должен вернуть)
Фактическая дата возврата книги.


и учиться, учиться, учиться!

Последний раз редактировалось Serge_Bliznykov; 16.09.2009 в 19:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.09.2009, 18:49   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

не знаю на чем вы это пишете, но при такой постановке задачи
Цитата:
запрос должен выдавать список фамилий без повторов если у них есть по несколько книг! к примеру 3 человека взяли 10 книг одного автора, Иванов взял 4 книги, Петров - 1 и Сидоров - 5 ! мне нужно отобразить в 1 таблице список из 3 фамилий Иванов, Петров, Сидоров, при этом во 2-ой таблице показать при наведении курсора на Иванова его 4 книги, на Петрова - 1 и на Сидорова тоже 5!
нужно писать 2 запроса
первый вернет всех читателей
Код:
select *
from FIO
второй по параметру вернет книжки
Код:
select Kniga
from Knigi
where idid = :p0
в параметр подставите текущее значение из первого запроса по полю ID

2 Serge_Bliznykov
а кто его знает что он там хранит в поле Knigi.Knigа ?!
и в условии нигде не нашел что нужно показывать все ФИО, которые пользуются/пользовались книгой
но что дорабатывать всегда найдется

Последний раз редактировалось soleil@mmc; 16.09.2009 в 18:53.
soleil@mmc вне форума Ответить с цитированием
Старый 17.09.2009, 09:20   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Можете попробовать данный запрос:
Код:
select FIO.* from FIO
where exists(select kniga.IDID from kniga where kniga.IDID=FIO.ID)
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ShowWindow: не отображаются компоненты на форме MyasNick Win Api 4 24.02.2009 18:20
несколько записей в базе 4321 БД в Delphi 1 13.11.2008 20:30
В IE7.0 не отображаются некоторые элементы страниц форума, которые нормально отображаются в FireFox3.0. Taras HTML и CSS 10 27.09.2008 13:30
Не отображаются данные связанные с гл. таблицей? zimmion БД в Delphi 11 27.02.2008 18:50
Не отображаются новые собщения Master-Skull О форуме и сайтах клуба 0 19.08.2007 13:41