我有两个名为“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
如果有一个更好的方式让我开始比使用上面的代码,我愿意接受所有的建议。
答案 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);
。