问题描述
我在数据库中有两个表(详细信息和图像),并且正确地获取了第一个表(详细信息)。详细信息具有名称为code的行,并且我想使用包含在其中的代码元素获取图像表详细信息表。
表格详细信息如下:
$response = array();
$sql = " SELECT * FROM `details` ORDER BY `id` DESC ";
$run = $connect->prepare($sql);
$run->execute();
$record = $run->fetchAll(PDO::FETCH_ASSOC);
$response['res'] =[$record];
echo json_encode($response,JSON_PRETTY_PRINT);
响应如下:
{
"res": [
[
{
"id": "1","title": "bucher","name": "jack sib","start": "7am to 6pm","details": "gtgtty rtrtrt","user": "[email protected]","code": "ulv1mx8wztcyvf55ns4hlcgr11lzktyh","time": "2020-08-21 16:24:19"
},{
"id": "2","title": "super market","name": "alibaba","start": "6 Am to 6 Pm","details": "everything is good and get better","user": "[email protected]","code": "umtyw95hu4voe49rz95ej0cftmnglom1","time": "2020-08-17 17:26:40"
}
}
一切都很好并且正确,但是当我想从数据库中获取图像并且我想用特殊代码显示每张图像时,却只用代码向我显示一张图像。
我写这样的代码:
foreach ($record as $row){
$sqlImage = " SELECT * FROM `image` WHERE code= ? LIMIT 1 ";
$runImage = $connect->prepare($sqlImage);
$runImage->bindValue(1,$row['code']);
$runImage->execute();
$recordImage = $runImage->fetchAll(PDO::FETCH_ASSOC);
}
,响应为:
{
"advert": [
[
{
"id": "1","time": "2020-08-17 17:26:40"
}
],[
{
"id": "1","url": "..\/public\/uploadPic\/cb49f60092bb9b28e69487171208a0d09.jpg","token": "umtyw95hu4voe49rz95ej0cftmnglom1"
}
]
]
}
第二张图像没有显示,我也不知道为什么。
解决方法
这可能会在单个查询中获取所需的结果,包括针对特定代码的图像(如果存在)。否则,它将在NULL
表列中返回image
。
SELECT details.*,image.* FROM details LEFT JOIN details
ON image.code = details.code ORDER BY details.id DESC
请注意,您正在从image
表中提取所有数据,这似乎不必要,因为您已经有了第一个表中的代码,并且只需要图像URL和令牌。
您可以重写查询以仅附加第二张表中的图像:
SELECT details.*,image.url,image.token FROM details LEFT JOIN details
ON image.code = details.code ORDER BY details.id DESC