gpt4 book ai didi

php - 使用fetch显示时获取子数据?

转载 作者:行者123 更新时间:2023-11-28 23:31:33 25 4
gpt4 key购买 nike

我正在研究用户可以创建笔记的东西。

一个笔记有一个 id,一个 owner_id 和数据。实际上,当页面加载时,我进行了一个基本的 SELECT 查询以获取用户的所有注释并使用 PHP 循环显示它并获取:

$stmt = $conn->prepare("SELECT id, data FROM notes WHERE owner = ?");
$stmt->bind_param("s", $_SESSION["id"]);

[...]

while($stmt->fetch()){
display_note($note_id, $data);
}

注释表如下所示:

Note(id, owner, data)

我想做的是给笔记添加标签。为此,创建了两个附加表:

Tags(id, name)
Note_tags(note_id, tag_id)

因此,当用户添加标签时,我的 PHP 代码会查看标签名称是否已存在,获取该标签的 ID 或创建它,然后取回新创建的标签 ID。

然后我在 note_tags 表中添加一个条目,其中包含笔记 ID 和标签 ID。

问题是我不知道如何在获取循环中一个接一个地显示笔记时获取笔记的所有标签。

我想我必须为每个笔记做一个 SELECT 查询,但我认为这不是最好的解决方案。例如,如果用户有超过 100 条笔记,那么进行 100 次查询是否是一个好主意?

如果它们都没有更好的解决方案,那么如何在 PHP 中进行嵌套查询?

感谢您的帮助。

最佳答案

你需要构建一个多维数组。

首先,获取所有注释和标签:

SELECT notes.id, data, tag_id, tags.name AS tag_name
FROM notes
LEFT JOIN note_tags ON note_id = tag_id
LEFT JOIN tags ON tags.id = tag_id
WHERE owner = ?

然后遍历结果构建数组

$data = array();
while($row = $stmt->fetch()){
$data[$row["id"]]["data"] = $row["data"];
$data[$row["id"]]["tags"][$row["tag_id"]] = $row["tag_name"];
}

现在你应该有一个如下所示的数组:

[
{
"data":"The content of a note",
"tags": [
"the name of a tag",
"the name of an other tag"
]
},
{
"data":"The content of an other note",
"tags": [
"the name of a tag",
"the name of an other tag"
]
}
]

关于php - 使用fetch显示时获取子数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com