为每个项目选择子集

时间:2018-06-30 09:11:20

标签: php mysql

我正在使用SQL(通过PHP脚本)从数据库中获取项目列表,即

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

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

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

现在,我想准备所有书籍的清单,并且想为每本书查看所有相关文章(例如书名)。

  • 书1
    • 第1条
    • 第2条
  • 书2
    • 第3条

到目前为止,我可以通过图像获取此类列表的唯一方法是首先执行查询以获取所有书籍,然后为每本书选择相关文章。但是,这将需要大量单独的SQL调用。

有人可以通过一个电话获得这样的列表吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

$articlesByBook[$bookId]

答案 1 :(得分: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;