php - 将多个表的结果插入一个 json_encode()

标签 php mysql json

请原谅我的语言错误,我会说法语。

我在这个网站和其他地方做了一些研究,但我的发现并没有解决我的问题。

我正在做一个网站,人们可以在上面发布他们的故事。我正在开发一个页面,作者应该可以在该页面上看到他的故事和每个故事的章节。

我对两个表进行查询以获取故事和章节的标题。我有一个“故事”表,其中有每个故事的标题和摘要(以及其他内容,如 ID 和发布日期)。还有一个名为“章节”的表,其中有每一章的标题和它们所属的故事的 id。

我想稍后在我的 html 中检索这些项目,以获得类似这样的内容:


故事标题 1

第一章

第 2 章


所以我做了一个json_encode()但是JSONLint说我得到的json是无效的。 PHP 对我来说是新手,我开始学习,所以我可能没有正确编写我的代码。

这是我的代码:

<?php
session_start();
require_once('connexion_db.php');

if($db=connect()){
    $userID = $_SESSION['id'];

    $arr = array();

    $reqRecits = $db->query('SELECT titre, id FROM recits WHERE user_id = '.$userID.'');
    $resRecits = $reqRecits->fetchAll(PDO::FETCH_ASSOC);

    foreach ($resRecits as $r){
        $recitID = $r['id'];
        $recitTitre = $r['titre'];

        $reqChapitres = $db->query('SELECT id, titre_chapitre FROM chapitres WHERE recit_id = '.$r['id'].'');
        $resChapitres = $reqChapitres->fetchAll(PDO::FETCH_ASSOC);

        foreach ($resChapitres as $c){
            $chapTitre = $c['titre_chapitre'];
        }

        $arr = array('titre'=>$recitTitre,'chapitre'=>$chapTitre);
        echo json_encode($arr, JSON_UNESCAPED_UNICODE);
    }

}else{
    echo "bdd non connectée.";
}
?>

我测试了提出的方法here ,但结果更糟。 我不知道该怎么办:(

感谢您的帮助!

最佳答案

您似乎希望内部循环更像这样:

$chapTitre = array();
foreach ($resChapitres as $c){
  $chapTitre[] = $c['titre_chapitre'];
}

因此您生成的 JSON 将包含所有章节标题。

此外,就目前而言,您列出了一系列未连接的 JSON 对象,它们可能应该是一个数组才能成为合法的 JSON 对象。

foreach ($resRecits as $r){
    $recitID = $r['id'];
    $recitTitre = $r['titre'];

    $reqChapitres = $db->query('SELECT id, titre_chapitre FROM chapitres WHERE recit_id = '.$r['id'].'');
    $resChapitres = $reqChapitres->fetchAll(PDO::FETCH_ASSOC);

    $chapTitre = array();
    foreach ($resChapitres as $c){
      $chapTitre[] = $c['titre_chapitre'];
    }

    $arr[] = array('titre'=>$recitTitre,'chapitre'=>$chapTitre);
}

echo json_encode($arr, JSON_UNESCAPED_UNICODE);

将把它们全部收集起来并输出为一个列表。

[
  { 
    'titre': 'Title 1',
    'chaptitre': ['Chapter 1', 'Chapter 2']
  },
  { 
    'titre': 'Title 2',
    'chaptitre': ['Chapter 1', 'Chapter 2', 'Chapter 3']
  },
]

关于php - 将多个表的结果插入一个 json_encode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360647/

相关文章:

php - 如何实现标签搜索系统?

MySQL 不等于 where 子句中 >= '' 为 null 吗?哪个表现更好?

php - 为什么不再推荐 mysql 扩展?

单例中类字段和方法的Java顺序

json - 复杂的 jq 过滤器

java - 415 不支持的媒体类型(JAVA + Angular + RestFULL JSON)

javascript - 自动访问 json 中的字母数字索引

PHP以真实二进制读取二进制文件

php - 如何获取codeigniter事件记录中的特定数组

php - 从多维关联后数组创建关联数组 - Codeigniter