SELECT结果来自另一个表AS列数组

时间:2016-12-13 15:59:51

标签: php mysql sql web

我无法弄清楚如何从2个表中获得结果,在1个查询结果中(不能简单加入)

我在MySQL数据库中有这两个表:

Table 1: sales
id
name
info

Table 2: users
sale_id
user_id

现在,每次销售都有不同数量的指定用户。一些销售有2个用户,有些销售有10个用户。

在单行中,我需要有sale表中的列,以及所有已分配给它的用户(使用相同的Sale_id连接)

我需要结果,如下:

enter image description here

4 个答案:

答案 0 :(得分:0)

试试这个:

minimizator_weighted ? foo<data_set::pt_weighted>() : foo<data_set::pt>();

答案 1 :(得分:0)

您可以简单地连接两个表并获取如下查询结果集:

saleID | saleName | userID | userName
1      | Oct Sale | 5      | Tim   
1      | Oct Sale | 6      | Nik
2      | Nov Sale | 7      | Bill

然后,您可以遍历每一行并根据该数据构建关联数组:

$sales = array();
while( $row = mysqli_fetch_assoc($result)) {
    if (!array_key_exists($row['saleID'], $sales)) {
        $sales[$row['saleID']] = array(
           'saleID'   => $row['saleID'], 
           'saleName' => $row['saleName'],
           'users'    => array()
        );
    }
    array_push($sales[$row['saleID']]['users'], array(
        'userID' => $row['userID'],
        'userName' => $row['userName']
    ));
}

答案 2 :(得分:0)

好吧,MySQL并没有像这样给你一个漂亮的嵌套数组。但是你可以通过循环结果来创建它。假设您的MySQL连接名为public class DateRenderer { private static final Log log = LogFactory.getLog(DateRenderer.class); public DateRenderer(){ } public static Date getDayDate(){ log.info("New Date for test!"); return new Date(); } } ,请尝试类似

的内容
$mysqli

答案 3 :(得分:0)

对您的编程语言的一些见解会很好。 是的,正如wogsland和icoder所建议的那样,人们通常使用连接并循环结果来构建en数组。但正如Yoleth指出的那样,使用GROUP_CONCAT就是你所需要的。我不知道这是否是目标,但它可以减少结果中使用的内存,因为没有行重复。

SELECT info FROM Sales AS s,
(
    SELECT sale_id, GROUP_CONCAT(user_id) AS assigned_users
    FROM Users 
    GROUP BY sale_id) AS u 
WHERE s.id=u.sale_id;

在单个查询中,使用精彩的JOIN:

SELECT s.info AS info, u.sale_id AS sale_id, GROUP_CONCAT(u.user_id) AS assigned_users 
FROM Sales AS s LEFT JOIN Users AS u 
ON s.id=u.sale_id 
WHERE sale_id IS NOT NULL GROUP BY u.sale_id;