为每个项目选择子集

8ehkhllq  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(322)

我正在使用sql(来自php脚本)从我的数据库中获取项目列表,即。

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

我还有一个包含文章的表,其中有一列 bookId 指的是书的id。

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

现在,我想准备一个所有书籍的列表,并且对于每一本书,我想看到所有相关的文章(例如,仅仅是标题)。
第一册
第1条
第2条
第2册
第3条
到目前为止,我唯一能得到这样一个列表的方法是首先执行一个查询来获得所有的书籍,然后为每本书选择相关的文章。但是,这将需要许多单独的sql调用。
有人知道一个电话能不能得到这样一份名单吗?

puruo6ea

puruo6ea1#

您可以将第二个sql查询更改为:

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

然后使用simple foreach创建新数组,其中$articles是此查询的结果数组:

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

然后您可以通过以下方式访问给定书籍的所有文章:

$articlesByBook[$bookId]
unftdfkk

unftdfkk2#

你可以使用连接,

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;

相关问题