Я использую SQL (из скрипта PHP), чтобы получить список элементов из моей базы данных, т.е.
SELECT 'id', 'title' FROM 'books' WHERE 'removed' = NULL;
У меня также есть таблица, содержащая статьи с колонкой bookId
которая ссылается на идентификатор книги.
SELECT 'id', 'title' FROM 'articles' WHERE 'bookId'=1;
Теперь я хочу подготовить список всех книг, и для каждой книги я хочу видеть все связанные статьи (например, только название).
Пока единственный способ создать такой список - сначала выполнить запрос, чтобы получить все книги, а затем для каждой книги выбрать связанные статьи. Однако для этого потребуется много отдельных вызовов SQL.
Кто-нибудь может подумать, можно ли получить такой список одним звонком?
Вы можете изменить второй запрос SQL на:
SELECT 'id', 'title', 'bookId' FROM 'articles';
а затем создать новый массив с простым foreach, где $ articles - это массив результатов этого запроса:
$articlesByBook = [];
foreach ($articles as $article) {
$articlesByBook[$article['bookId']][] = $article;
}
а затем вы можете получить доступ ко всем статьям для данной книги:
$articlesByBook[$bookId]
Вы можете использовать JOIN,
SELECT a.id,a.title ,b.id,b.title
FROM 'books' a
LEFT JOIN 'articles' b ON b.bookId=a.id
WHERE a.removed IS NULL;