2015-08-04 2 views
0

У меня есть следующие 4 таблицы, настроенные в MySQL. Я хочу иметь возможность выводить данные с определенными битами данных из всех них с помощью объединений, но я не могу заставить его работать.MySQL Присоединиться к 3 таблицам возвращает только одно значение

TABLE books 
--------------------------- 
| id |   name   | 
--------------------------- 
| 1 | War of the Worlds | 
| 2 | The Treasure Island | 
| 3 |  The Hobbit  | 
| 4 |  Friend or Foe | 
--------------------------- 

TABLE users 
-------------- 
| id | name | 
-------------- 
| 1 | Alfie | 
| 2 | Ben | 
| 3 | Charlie | 
| 4 | Doug | 
-------------- 

TABLE library 
------------------- 
| user_id | book_id | 
------------------- 
| 1 | 1 | 
| 1 | 3 | 
| 1 | 4 | 
| 1 | 5 | 
| 2 | 2 | 
| 4 | 4 | 
------------------- 

TABLE reviews 
------------------ 
| book_id | rating | 
------------------ 
| 1 | 4 | 
| 1 | 3 | 
| 1 | 4 | 
| 3 | 5 | 
| 4 | 1 | 
| 4 | 3 | 
| 4 | 1 | 
------------------ 

Я попытался с помощью следующей MySQL запросов:

SELECT 
library.user_id, 
users.name, 
library.book_id, 
books.name, 
COUNT(reviews.book_id) 
FROM library 
JOIN users 
    ON users.id = library.user_id 
JOIN books 
    ON books.id = library.book_id 
LEFT JOIN reviews 
    ON reviews.book_id = books.id 
WHERE library.user_id = 1; 

Я хочу выходной быть что-то вдоль линий:

------------------------------------------------------------ 
| user_id | users.name | book_id |  books.name | COUNT | 
------------------------------------------------------------ 
| 1 | Alfie | 1 | War of the Worlds | 3 | 
| 1 | Alfie | 3 |  The Hobbit | 1 | 
| 1 | Alfie | 4 | Friend or Foe | 3 | 
------------------------------------------------------------ 

Но я с моим запросом :

------------------------------------------------------------ 
| user_id | users.name | book_id |  books.name | COUNT | 
------------------------------------------------------------ 
| 1 | Alfie | 1 | War of the Worlds | 7 | 
------------------------------------------------------------ 

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

P.S. Извиняюсь за дерьмовое форматирование, я пытался сделать это как можно проще :)

+0

Попробуйте изменить все 'JOIN' на 'LEFT JOIN' – eirikir

ответ

0

Поскольку вы используете счетчик, попробуйте сгруппировать запрос на основе user_id, имя, book_id, BOOK_NAME

SELECT 
library.user_id, 
users.name, 
library.book_id, 
books.name, 
COUNT(reviews.book_id) 
FROM library 
JOIN users 
ON users.id = library.user_id 
JOIN books 
ON books.id = library.book_id 
LEFT JOIN reviews 
ON reviews.book_id = books.id 
WHERE library.user_id = 1 
group by library.user_id,users.name, library.book_id, books.name 
Смежные вопросы