尝试合并 SQL 查询的两个结果 - ToDoList App

Posted

技术标签:

【中文标题】尝试合并 SQL 查询的两个结果 - ToDoList App【英文标题】:Trying to merge two results of SQL queries - ToDoList App 【发布时间】:2020-02-24 15:01:15 【问题描述】:

我正在尝试使用 phpmysql 中合并两个查询的两个结果,但我不知道该怎么做!我正在使用 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的主要内容,如果未能解决你的问题,请参考以下文章

sql 用union合并合并查询结果

mysql 将两个SQL语句查询结果并在一起

mysql合并结果集

请教:SQL同一数据库中,两个查询结果数据类型不同时的union all 合并问题

如何在 SQL Server 中加入两个查询的结果?

PostgreSQL 查询把多条记录合并一条