如何将mysql连接结果包含到PHP多维数组中

时间:2017-05-24 22:56:58

标签: php mysql arrays multidimensional-array

我有两个名为“Accounts”和“Images”的表。

图片将包含每个帐户的多个结果。

如何在单个数组中使用mysql和php反映与帐户关联的所有图像,所有图像用逗号分隔?

我不确定哪个加入使用...

以下是我期望的最终结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [firstName] => "John"
            [lastName] => "Doe"
            [filename] => "image1.jpg"
        )

)

这是我目前得到的:

$sql = SELECT a.firstName,a.lastName,i.fileName FROM accounts a INNER JOIN images i ON a.id = i.accountID;

$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_assoc($result)){
        $accounts[] = $row;
}

print_r($accounts);

到目前为止,这是我的代码:

Sub build()
Dim r As Long
r = 4
Do While r < 36
    Do While Cells(81, r) < 4 And Cells(82, r) < 4 And Cells(83, r) < 9 And Cells(84, r) < 9
        Dim iCell As Range
        Randomize
        For Each iCell In ActiveSheet.[Cells(4,r):Cells(78,r)]
            iCell.Value = Range(iCell.Validation.Formula1).Cells(Int(Range(iCell.Validation.Formula1).Count * Rnd + 1))
        Next
    Loop
    r = r + 1
Loop
End Sub

如果有一个更好的方式让我开始比使用上面的代码,我愿意接受所有的建议。

2 个答案:

答案 0 :(得分:4)

您可以使用单个SQL查询和let myDoc = ...my root svg element; let myChildSVG = ...require('UIElement.svg'); let child = myDoc.nested().svg(myChildSVG); 函数完成所需的输出。

以下内容将查找所有帐户(包含和不包含图像),以及逗号分隔的图像文件名列表。

如果您只想查找包含图片的帐户,请更改GROUP_CONCAT的{​​{1}}。

LEFT JOIN

答案 1 :(得分:1)

基本上,您正在寻找一种方法将连接表中的多行连接成一个字符串。有一些解决方案,但它们是特定于数据库的 - 你可以查看这个SO答案的灵感 - How to create a SQL Server function to "join" multiple rows from a subquery into a single delimited field?

但可能更简单的方法是将结果合并到PHP代码中。由于返回每个帐户的重复数据,这会带来一些性能损失,但如果您只选择几个列,它就不是很重要。

代码可能如下所示:

$sql = 'SELECT a.id,a.firstName,a.lastName,i.fileName FROM accounts a INNER JOIN images i ON a.id = i.accountID';

$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_assoc($result)){
    if (!isset($accounts[$row['id']])) {
        $accounts[$row['id']] = $row;
    } else {
        $accounts[$row['id']]['fileName'] .= ',' . $row['fileName'];
    }
}

print_r($accounts);

注意,此代码使用与帐户ID匹配的密钥创建数组$帐户。如果您确实需要简单的序列号作为键,请在循环后添加$accounts = array_values($accounts);