我将数组存储到会话中,以便于检索和工作。
$responses = session('get_all_response');
$ responses最多包含30条记录。
我在数组内循环
foreach($responses as $res)
{
$bo_images = DB::select('SELECT
image.bo_hotel_code,
image.bo_image_type_code,
image.bo_path,
imagetypes.bo_content_imagetype_description
FROM
bo_images AS image
RIGHT JOIN bo_content_imagetypes AS imagetypes
ON imagetypes.bo_content_imagetype_code = image.bo_image_type_code
WHERE image.bo_hotel_code = "'.$res['code'].'" AND image.bo_image_type_code = "COM" LIMIT 1');
if($bo_images != null)
{
foreach($bo_images as $row)
{
$responses[$res['code']]['information']['bo_images'] = array(
'image_type_code' => $row->bo_image_type_code,
'image_path' => 'http://photos.hotelbeds.com/giata/'.$row->bo_path,
'image_type_description' => $row->bo_content_imagetype_description,
);
}
}
$bo_categories = DB::select('SELECT
a.category_code,
b.bo_content_category_description
FROM
bo_hotel_contents AS a
RIGHT JOIN bo_content_categories AS b
ON b.bo_content_category_code = a.category_code
WHERE a.hotel_code= "'.$res['code'].'"');
if($bo_categories != null)
{
foreach($bo_categories as $row)
{
$responses[$res['code']]['information']['rating'] = array(
'description' => $row->bo_content_category_description,
);
}
}
}
在每个循环中,都有一个代码,其中包含用于获取数据库内部内容的密钥。
然后,它将把等于数组索引的内容压入该数组。
否则。这是成功的。但是我知道这不是正确的方法。我知道这样做要好得多。
非常感谢您的帮助
答案 0 :(得分:1)
我对Laravel不熟悉,所以我不知道预准备语句是否可以使用它,但是您应该做一些清理工作和/或验证$res['code']
以确保它是整数,并假设那就是应该的。
首先,为WHERE IN
子句准备一个字符串。
$str = "";
foreach ($responses as $res){
$str .= ','.$res['code'];
}
$str = substr($str,1); // to remove the comma
然后,您需要更改查询以使用IN
语句。
WHERE a.hotel_code IN({$str})
我猜image.bo_hotel_code
是指$res['code']
。但是如果没有,您可以修改SELECT
语句(如果有内存的话):
$code = $res['code'];
SELECT {$code} as code,
image.bo_hotel_code,
image.bo_image_type_code,
...
然后,您将遍历结果并将其以相同的方式放入数组,其中$row['code']
表示用于选择结果的代码。它应该比运行重复查询快得多,并且IN
语句中的每个代码应该有一行。