【问题标题】:SQL select query for 3 tables and put result into one array incrementing by oneSQL select查询3个表并将结果放入一个数组中,递增1
【发布时间】:2013-10-18 15:34:32
【问题描述】:

我正在尝试从一个表中进行 sql 选择,然后从第二个表中进行 sql 选择,然后将结果放入同一个数组中。

我使用的原始 SQL 查询如下:

$sql = "SELECT users.*, cursos.titulo, subscriptions.status
FROM users
LEFT OUTER JOIN subscriptions
ON users.userID = subscriptions.user_id
LEFT OUTER JOIN cursos
ON cursos.id = subscriptions.curso_id";

这是从表用户中提取所有数据,然后根据表订阅的值从表游标中获取数据。 这样,查询的工作方式就像从表 users 中提取相同的数据,具体取决于在 subcriptions 表中可以找到多少次用户 ID。假设订阅表是否包含

curso_id | user_id 
14       | 48
12       | 48

在这种情况下,它将生成 2 个数组,每个数组将包含来自用户的所有数据,而不是来自 cursos 的数据。

所以我的问题是如何进行 SQL 查询,该查询将首先执行 SELECT * FROM Users ,在表中的第一行完成后,我想执行第二个查询,如下所示:

SELECT users.id, cursos.titulo, subscriptions.status
FROM users
LEFT OUTER JOIN subscriptions
ON users.userID = subscriptions.user_id
LEFT OUTER JOIN cursos
ON cursos.id = subscriptions.curso_id

然后将所有信息放在一个变量中作为titulo,并放在另一个变量中作为状态。在这种情况下,这些信息可以是各种结果,因此应该用逗号或空格分隔,但重要的是要加载到数组的同一单元格中。

此操作将生成一个数组,其中每个用户包含 1 行,其中包含所有用户数据列,另外 2 列用于标题和状态,其中每行应包含从 cursos 表中提取的各种结果,具体取决于在这种情况下,用户 ID 在订阅表中出现了多少次“48”。目标是将标题和状态信息放在单个单元格上,无论光标表中有多少结果。欢迎任何帮助。

所以最终的结果数组应该是这样的:

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    如果我没看错,您将不得不构建您的数据数组与正常情况稍有不同。例如大多数人都有

    while($row = mysql_fetch_assoc($result)) {
       $data[] = $row;
    }
    

    如果您想从另一个查询添加到该数组,则必须使用两个查询之间共有的特定字段来键入数组,例如

    while($row = mysql_fetch_assoc($result)) {
       $key1 = $row['key1'];
       $key2 = $row['key2'];
       etc...
       $data[$row1][$row2][....][] = $row;
    }
    

    然后使用下一个查询中的相同键,例如

    SELECT key1, key2, ...
    
    while($row = mysql_fetch_assoc($other_result)) {
       $key1 = $row['key1']
       ...
       $data[$row1][$row2][....][] = $row;
    }
    

    【讨论】:

    • 我想知道这是否可以通过单个查询来完成,并一次将所有信息排序在一个数组中。但我也会调查你的答案。
    • 可能。每当您有 2 个查询并且第二个查询使用第一个查询中的数据来执行时,它们几乎总是可以被重写为单个 JOINed 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多