Выберите подмножество для каждого элемента

0

Я использую SQL (из скрипта PHP), чтобы получить список элементов из моей базы данных, т.е.

SELECT 'id', 'title' FROM 'books' WHERE 'removed' = NULL;

У меня также есть таблица, содержащая статьи с колонкой bookId которая ссылается на идентификатор книги.

SELECT 'id', 'title' FROM 'articles' WHERE 'bookId'=1;

Теперь я хочу подготовить список всех книг, и для каждой книги я хочу видеть все связанные статьи (например, только название).

  • Книга 1
    • Статья 1
    • Статья 2
  • Книга 2
    • Статья 3

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

Кто-нибудь может подумать, можно ли получить такой список одним звонком?

  • 0
    Вы проверяли SQL-соединения? используйте этот URL w3schools.com/sql/sql_join.asp, дайте мне знать, если это то, что вы ищете
Теги:

2 ответа

0
Лучший ответ

Вы можете изменить второй запрос SQL на:

SELECT 'id', 'title', 'bookId' FROM 'articles';

а затем создать новый массив с простым foreach, где $ articles - это массив результатов этого запроса:

$articlesByBook = [];
foreach ($articles as $article) {
   $articlesByBook[$article['bookId']][] = $article;
}

а затем вы можете получить доступ ко всем статьям для данной книги:

$articlesByBook[$bookId]
0

Вы можете использовать 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;
  • 0
    При использовании соединения я получу длинный список с дублирующимися записями, который сложнее отсортировать по списку. Поэтому решение, предложенное Михалем, лучше соответствует моим потребностям.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню