2017-01-04 2 views
0

У меня есть две таблицы. Один из них - таблица книг. Он имеет две колонки. id|title. Еще одна таблица student_books. Он имеет две колонки: student_id|book_id. Когда ученик пытается прочитать книгу, я проверяю таблицу student_books, соответствуют ли ученики и идентификаторы book_id. Студент может купить несколько книг, поэтому может быть несколько записей в таблице student_books. теперь я хочу показать список книг, основанный на популярности (с максимальными записями в таблице student_books) на странице. Как написать SQL-запрос?mysql: сортировать таблицы с использованием данных другой таблицы

+0

Можете ли вы предоставить запрос, который вы пытались написать, чтобы получить данные, которые вы хотите? Каков ваш намеченный результат запроса? Просто книги названы по популярности? или фактический счет? –

ответ

0
SELECT b.id, b.title 
    FROM books b 
    LEFT JOIN students s ON s.book_id = b.id 
GROUP BY b.id, b.title 
ORDER BY COUNT(s.book_id) DESC; 
+0

Вы выбираете 'title', но этот столбец не является агрегированным, а также не отображается в' GROUP BY'. –

+0

@TimBiegeleisen Не проблема в MySQL. – shmosel

+0

Да, это проблема в MySQL, и ваш запрос не запускался в определенных версиях. –

1

Вы можете присоединиться книги таблицу с student_books и порядке подсчета для каждой книги

select b.* 
from books b 
left outer join student_books s 
on b.id = s.book_id 
group by b.id, b.title 
order by count(s.student_id) desc; 
Смежные вопросы