2015-09-30 2 views
2

У меня проблемы с INNER JOINs. Я предполагаю, что я делаю критическую, но принципиальную ошибку в своей теории.Использование внутренних соединений дает слишком много результатов

Структура таблицы:

  • BookDB - эта таблица содержит данные о книгах в нашей библиотеке (название, штрих-код, проверить состояние и т.д.)
  • LibraryDB - эта таблица содержит данные о том, кто проверил, что книга, когда
  • StudentDB - эта таблица содержит данные о студентах (имя, номер документа и т.д.)

Я сделал страницу в котором перечислены все книги в настоящее время проверяются путем использования ч вывести статус таблицы BookDB. Но, конечно, это не дает мне знать, кто у него есть.

Чтобы также показать, кто проверил книгу, я хочу позвонить в библиотекуDB, в которой записаны, кто ее проверил, а затем вызовите StudentDB, который содержит имя и т. Д. Ученика.

Так что я сделал запрос, как это:

SELECT * FROM BookDB 
INNER JOIN LibraryDB ON BookDB.barcode = LibraryDB.barcode 
INNER JOIN StudentDB ON LibraryDB.studentid = StudentDB.studentid 
WHERE BookDB.status = '$checkinstatus' 
ORDER BY title ASC 

Проблема заключается в том, что вместо того, чтобы просто получить результат человека, который проверил его совсем недавно, я получаю каждый человек, который когда-либо проверил его.

Я понимаю, что это, вероятно, просто, но я пробовал смотреть на другие подобные сообщения и, похоже, не могу понять основную проблему здесь. Я понимаю, что мне нужно каким-то образом ограничить запрос, но не знаю синтаксиса для этого, как я хочу.

Заранее спасибо.

EDIT: Мой текущий результат выглядит следующим образом:

Animals in danger A1 Shingen Tomita 9780194233798 Edit Book Delete Book 
Armans journey A1 Ayaka Morikawa 9780521184939 Edit Book Delete Book 
Armans journey A1 Ayaka Morikawa 9780521184939 Edit Book Delete Book 
Armans journey A1 Naomi Maki 9780521184939 Edit Book Delete Book 
Armans journey A1 Naomi Maki 9780521184939 Edit Book Delete Book 
Armans journey A1 Iwamoto Kazumi 9780521184939 Edit Book Delete Book 
Armans journey A1 Iwamoto Kazumi 9780521184939 Edit Book Delete Book 
Armans journey A1 Kanata Shokai 9780521184939 Edit Book Delete Book 
Bens big swim OD1 Keiichiro Takemura 9780194722674 Edit Book Delete Book 
Bens big swim OD1 Keiichiro Takemura 9780194722674 Edit Book Delete Book 
Bens big swim OD1 Takato Suzuki 9780194722674 Edit Book Delete Book 

Для всех тех же книг, я хотел бы выводить только последнюю запись для каждой уникальной книги:

Animals in danger A1 Shingen Tomita 9780194233798 Edit Book Delete Book 
Armans journey A1 Kanata Shokai 9780521184939 Edit Book Delete Book 
Bens big swim OD1 Takato Suzuki 9780194722674 Edit Book Delete Book 
+0

Вы можете попробовать 'ORDER BY LibraryDB.date DESC LIMIT 1', чтобы получить самую последнюю книгу для данного' $ checkinstatus'. –

+0

Спасибо за ваши предложения. Это дает мне самую последнюю книгу для статуса проверки, но я бы хотел получить последний статус для каждой отдельной книги. Я привел пример в свой первоначальный пост. –

+0

Можете ли вы предоставить свою схему и вставить инструкцию своих данных? –

ответ

0

Так что я не мог понять, что делать, поэтому я просто пошел и добавил колонку в t он BookDB, показывающий, кто был последним контрольным-внешним, который устранял необходимость вызова таблицы записей LibraryDB, и поэтому позаботился о проблеме получения каждой прошлой записи, а не только самой последней.

0

Вы можете попробуйте это так:

SELECT * FROM BookDB,LibraryDB,StudentDB WHERE BookDB.barcode = LibraryDB.barcode AND LibraryDB.studentid = StudentDB.studentid AND BookDB.status = '$checkinstatus' ORDER BY title ASC; 
+0

Возвращает тот же результат, что и запрос, который я разместил. –

Смежные вопросы