gpt4 book ai didi

php - 如何将具有一对多关系的数据从 MySQL 处理到 PHP

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

我正在使用以下查询返回有关单个习惯的数据。

一个习惯可以有很多步骤和很多评论。

当我运行以下查询时,它会重复每一步的习惯数据并在其中进行评论。

        SELECT 
habit_id, habit_user_id, habit_name, habit_category_id, habit_description, habit_target_user, habit_up_votes, habit_down_votes,
step_id, step_description,
comment_id, comment_user_id, comment_description
FROM habits, steps, comments
WHERE habit_id = ?
AND habit_id = step_habit_id
AND habit_id = comment_habit_id
ORDER BY step_order

示例输出(ID 应该足以了解正在发生的事情):

habit_id    step_id    step_description    comment_id    comment_description
1 1 do x 1 this works great!
1 1 do x 2 Awful!
1 1 do x 3 nice job
1 2 then do y 1 this works great!
1 2 then do y 2 Awful!
1 2 then do y 3 nice job

我希望能够获取返回的数据并将其放在一个数组中。

array("habit_id" => 1, "step_id" => array(1, 2), "comment_id" => array(1, 2, 3));

我能想到的唯一方法是:

执行 3 个单独的查询,1 次获取习惯数据,1 次获取该习惯的步数,1 次获取该习惯的评论。

按原样使用上述查询并使用习惯数据构建一个新数组,然后遍历所有行并为步骤和评论构建一个新数组,同时确保没有添加重复项.

这听起来效率太低了,任何人都可以通过修改我的查询以向 PHP 提供更多可用数据或在 PHP 中使用一些技巧来提出更好的方法。我曾经考虑过将数据连接到查询中的步骤和注释的数组中,但我认为这应该是 PHP 的工作,以这种方式操作数据。

我希望以这种方式获取数据的原因是返回它以供 Angularjs 应用程序使用。

最佳答案

查询没有问题。它返回足够的数据供您迭代并构建所需的数组。

$data = array();

// could be any type of loop here. whatever returns data from your query
while($row=mysql_fetch_array($result)) {
$data['habit_id'] = $row['habit_id'];

// the in_array check ensures there are no dupes
if (!in_array($row['step_id'], $data['step_id'])) {
$data['step_id'][] = $row['step_id'];
}
if (!in_array($row['comment_id'], $data['comment_id'])) {
$data['comment_id'][] = $row['comment_id'];
}
}

这将比三个单独的查询更有效。确保您的数据库已正确编入索引。并通过使用 EXPLAIN 运行查询来检查您是否正在使用这些索引。

关于php - 如何将具有一对多关系的数据从 MySQL 处理到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31173702/

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