Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

База данных SQL. Запрос на вывод книг

Макся Ученик (137), на голосовании 3 года назад
Запрос выглядит следующим образом:
SELECT
books.id As books_id,
books.tiitle as books_title,
books.description as books_desc,
books.article as books_article,
books.date as books_date,
extradition.client_id AS extradition_client_id,
books.author as books_author,
extradition.id as extradition_id,
extradition.user_id as ext_user_id,
employee.first_name as employee_first_name,
employee.middle_name as employee_middle_name,
employee.last_name as employee_last_name,
return_books.extradition_id as return_books_ext_id
FROM
books
left JOIN extradition on extradition.book_id = books.id
left join employee on employee.id = extradition.client_id
left JOIN return_books on return_books.extradition_id= extradition.id

проблема в том, что когда я выдаю какую либо книгу второй раз пользователю, он отображает ее в этом запросе, как избавиться от этого?
Не знаю на сколько понятно объяснил... но как вы можете наблюдать на первом скриншоте, данный запрос мне 3 раза выводит одну и туже книгу, тк я ее 2 раза выдавал
Голосование за лучший ответ
Добрый день Просветленный (38040) 3 года назад
Оо, вот ты та мне походу и нужен. Полюбому шаришь. Ответь на мой последний вопрос. Карму себе улудшишь и тогда ктонебудь ответит тебе. Оно короче все взаимосвязанно както.
Оракул Оракул (62089) 3 года назад
Так вы с заданием-то определитесь
В экстрадишн у вас хранятся выдачи книг, вы джойнитесь на нее зачем-то, в селекте всего 2 поля оттуда участвуют id выдачи и пользователя
Вот у вас и выводятся все выдачи одной и той же книги
Все логично, что написали, то и получили
Уберите джойны на экстрадишн и не будет нескольких строк
Хз, что за задание у вас вообще, что хотите получить
МаксяУченик (137) 3 года назад
Хочу с помощью запроса получить все книги что имеются в бд, и вывести на руках ли они кого-то или в библиотеке
МаксяУченик (137) 3 года назад
Что конкретно поменять в запрос, подскажите пожалуйста. И да, спасибо огромное за попытку помочь)
Оракул Оракул (62089) Макся, у вас книги все в одном экземпляре? С учетом новых требований что-то сложновато выходит джойн убирать не надо, но и поля из экстрадишн в селекте не нужны Если правильно понял у вас есть дата выдачи книги и срок, на который выдана Из этих двух полей надо вычислять, что сегодня книга еще выдана left join оставляете, но надо джойнить последний экстрадишн, добавив условие выше, как это сделать, хз Типа так date + term >= today - еще выдана, иначе - в либе (синтаксис субд надо гуглануть, как к дате прибавить количество дней, вот этот момент, конечно геморно хранится у вас) Я немного прибуханый и уже ночь глубокая, сорян
Алексей Хвостовский Мудрец (18147) 3 года назад
Изначально как-то странно..
Пусть будет таблица с клиентами и таблица с книгами..
И связывающая таблица с полями: ид книга, ид клиент, дата выдача, дата возврат. Ну и кто выдал книгу так же по ид, если надо. Сотрудников и читателей отделять, кстати, тоже не помешало бы хотя бы по полю-признаку. Ну или так же многие-ко-многим с таблицей должностей к примеру.
В общем, где возврат пустой, та книга на руках с такой-то даты, у того-то читателя. Это как раз при выдаче надо проверять, есть ли в библиотеке книга. Количество экземпляров одной книги привязать не сложно, если вдруг одинаковые книги будут.. Добавить в таблицу книг экземпляры числовым полем и проверять при селекте количество строк с пустыми датами по ид книги. Сравнивать с числовым полем из таблицы книг, короче..
Так же можно посмотреть историю где была книга, что, я так понимаю, нужно.. Просто селектом по ид книги.
Так бы получилось по одному запросу с двумя внутренними соединениями. Без внешних всегда проще, как по мне..
А перенести данные можно если что через insert into select. Если менять архитектуру. Я бы пока не поздно, поменял.. Можно без потерь.
Надеюсь, понятно излагаю.. в голове каша у меня. В режиме диалога я лучше)
Хотя.. тебе лучше знать что делать, у тебя уже 12 ноября.. А я тут в сентябре еще застрял..
Jurijus Zaksas Искусственный Интеллект (445791) 3 года назад
Данный запрос выдает историю выдачи книг. Если тебе нужен како-то другой запрос, прежде всего исключи из него историю выдачи.
Похожие вопросы