尝试合并 SQL 查询的两个结果 - ToDoList App
Posted
技术标签:
【中文标题】尝试合并 SQL 查询的两个结果 - ToDoList App【英文标题】:Trying to merge two results of SQL queries - ToDoList App 【发布时间】:2020-02-24 15:01:15 【问题描述】:我正在尝试使用 php 在 mysql 中合并两个查询的两个结果,但我不知道该怎么做!我正在使用 PDO。我正在为一种爱好编程,并正在尝试制作一个待办事项列表应用程序,就像 Trello 板一样。但是,我只是不知道如何合并来自数据库中不同表的两个结果。
思路如下:
我有一个名为“task_lists”的表格,内容如下:
'list_id => 1, list_name = 'listOne'
'list_id => 2, list_name = 'listTwo'
还有一个名为“任务”的表格:
task_id => 1, list_id => 1, task_name => 'taskOfListOne', duration => 5, is_done => 1
task_id => 2, list_id => 1, task_name => 'anotherTaskOfListOne', duration => 5, is_done => 1
task_id => 3, list_id => 2, task_name => 'taskOfListTwo', duration => 10, is_done => 0
我正在尝试创建一个在两个结果之间合并的数组,如下所示: (我知道这是数组应该是什么样子的粗略图片)
$result = [array]
[list_id] = 1, [list_name] = 'listOne' =>
[array][list_id] = 1, ['task_name] = taskOfListOne,[duration] = 5, ['is_done'] => 1
[array][list_id] = 1, ['task_name] = anotherTaskOfListOne,[duration] = 5, ['is_done'] => 1
[list_id] = 2, [list_name] = 'listTwo' =>
[array][list_id] = 2, ['task_name] = taskOfListTwo,[duration] = 5, ['is_done'] => 1
这甚至可能吗?我已经尝试过 Union sql 查询和嵌套 foreach 语句之类的方法,但它们都不适合我。我在这里遗漏了什么吗?
PS:对不起,我的英语不好。
【问题讨论】:
您是否尝试过使用 list_id 进行左连接? 解决它的有效方法是在你的 SQL 中使用 JOIN。 @besciualex,非常感谢!但是如何摆脱重复值呢? 【参考方案1】:你试过左连接吗?
SELECT TL.`list_id`, TL.`list_name`, T.`task_name`, T.`duration`
FROM task_lists AS TL
LEFT JOIN tasks as T ON TL.`list_id` = T.`list_id`
然后在 PHP 中以所需的格式构建数组。
后期编辑: 按照您的要求解析 SQL 数据的简单 PHP 示例(删除重复信息):
<?php
// $mysql_rows -> here is your query result, fetched as associative array
$filtered_array = array();
foreach ($mysql_rows as $row)
// Initiate record if is not already initiated
if (!isset($filtered_array[ $row['list_id'] ]))
$filtered_array[ $row['list_id'] ] = array(
'list_id' => $row['list_id'],
'list_name' => $row['list_name'],
'tasks' => array()
);
// Add tasks
$filtered_array[ $row['list_id'] ]['tasks'][] = array(
'task_name' => $row['task_name'],
'duration' => $row['duration'],
'is_done ' => $row['is_done ']
);
// Optional: if you want to remove list_id from $filtered_array key names, uncomment the next line
// $filtered_array = array_values($filtered_array);
?>
【讨论】:
我试过这个。如何摆脱重复值?谢谢您的意见! :) @Springsteen91 我添加了一个如何使用 PHP 解析数据的简单示例。 谢谢您,先生,您真是个天才。这就像一个魅力:)以上是关于尝试合并 SQL 查询的两个结果 - ToDoList App的主要内容,如果未能解决你的问题,请参考以下文章