Сразу к делу. Есть задача вывести из бд на странице например: список книг и рядом должен быть автор(имя автора) конкретной книги. Так же вывести автора и рядом должен быть список книг которые он написал. Есть две таблицы в бд:
Я предполагаю что для этого необходимо связать таблицы (один ко многим). Что я и попытался сделать на примере. Но вот в голову не приходит как правильно составить запрос и отобразить на странице именно так как я описал выше или связать правильно таблицы подскажите пожалуйста. Простой запрос на выборку данных получается сформировать 'SELECT * From books' который выводит все данные из бд а вот как правильно сделать вывод книг и что б соответсвующий автор выводился тут я затупил просто(. Заранее спасибо за понимание.
1. Запрос, который выведет автора рядом с книгой
SELECT b.*, w.name FROM books b LEFT JOIN writers w ON w.id = b.writer_id
Сразу же обращу внимание, что в запросе намеренно указал writer_id
вместо указанного Вами столбца id_writer
. Дело в том, что есть некие паттерны названия столбцов, таблиц и отношений, которых следует придерживаться для поддерживаемого и масштабируемого проекта. К примеру, названия таблиц пишется множественным числом, столбцы, которые ссылаются на внешние таблицы, называются по паттерну {foreign table name}_{foreign table column}
и так далее. Советую почитать об этих паттернах побольше, тогда проектировать БД станет легче.
2. Запрос, который выведет авторов вместе с книгами.
Дело в том, что из-за реляционности БД, мы не можем получать коллекции, мы можем получать только строки. При таком раскладе, получение всех книг авторов мы должны разбить на два этапа:
В данной ситуации на пользу приходит жадная загрузка, которая избавляет нас от антипаттерна N+1. Во многих фреймворках и ORM это идет из коробки:
//пример из ORM Eloquent, входящей в Laravel:
$author = \App\Author::with('books')->get();
Данный код в Laravel сделает 2 запроса в БД:
1. SELECT * FROM authors
2. SELECT * FROM books WHERE author_id IN (*ID авторов выше*)
А затем совместит это в единую коллекцию.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочется выполнить вычисления в отдельном от Ui потоке без всяких сигналовМетод, выполняющий вычисления — это приватный слот главного окна