[英]Join multiple rows of one table on one record (Codeigniter 3)
I would like to build query which returns product with all images not only with one image. 我想建立一个查询,该查询返回的产品不仅包含一个图像,而且包含所有图像。
This is my model for fetching products 这是我获取产品的模型
function get_latest($id){
$this->db->select('*');
$this->db->from('products');
$this->db->join('products_pictures', 'products_pictures.id_product = products.id_product', 'left');
$this->db->join('thumbs', 'thumbs.id_thumb = products_pictures.id_thumb', 'left');
$this->db->join('images', 'images.id_image = thumbs.id_image', 'left');
$this->db->order_by('date_c', 'DESC');
$this->db->limit($id);
$query = $this->db->get();
return $query->result();
}
And this is output 这是输出
0 =>
object(stdClass)[35]
public 'id_product' => string '1000' (length=4)
public 'name' => string 'Graham Corners' (length=14)
public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189)
public 'date_c' => string '2015-12-28 03:12:59' (length=19)
public 'date_u' => null
public 'id_category' => string '7' (length=1)
public 'id_user' => string '173' (length=3)
public 'alias' => string 'graham-corners' (length=14)
public 'active' => string '1' (length=1)
public 'id_product_thumb' => string '4996' (length=4)
public 'id_thumb' => string '4996' (length=4)
public 'thumb_path' => string 'http://lorempixel.com/250/150/?22290' (length=36)
public 'id_image' => string '4996' (length=4)
public 'image_path' => string 'http://lorempixel.com/1024/768/?77489' (length=37)
1 =>
object(stdClass)[36]
public 'id_product' => string '1000' (length=4)
public 'name' => string 'Graham Corners' (length=14)
public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189)
public 'date_c' => string '2015-12-28 03:12:59' (length=19)
public 'date_u' => null
public 'id_category' => string '7' (length=1)
public 'id_user' => string '173' (length=3)
public 'alias' => string 'graham-corners' (length=14)
public 'active' => string '1' (length=1)
public 'id_product_thumb' => string '4997' (length=4)
public 'id_thumb' => string '4997' (length=4)
public 'thumb_path' => string 'http://lorempixel.com/250/150/?87585' (length=36)
public 'id_image' => string '4997' (length=4)
public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37)
Cause i wan't to fetch all images of desired product i need to build a query which will output all product images under object product stored in some array or something 因为我不会获取所需产品的所有图像,所以我需要构建一个查询,该查询将在存储在某个数组或某些对象中的目标产品下输出所有产品图像
Desired output object should look similar to this 所需的输出对象应类似于此
0 =>
object(stdClass)[35]
public 'id_product' => string '1000' (length=4)
public 'name' => string 'Graham Corners' (length=14)
public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189)
public 'date_c' => string '2015-12-28 03:12:59' (length=19)
public 'date_u' => null
public 'id_category' => string '7' (length=1)
public 'id_user' => string '173' (length=3)
public 'alias' => string 'graham-corners' (length=14)
public 'active' => string '1' (length=1)
public 'images' => array (
[0] => stdClass Object
public 'id_thumb' => string '4998' (length=4)
public 'thumb_path'=> string 'http://lorempixel.com/250/150/?87585' (length=36)
public 'id_image' => string '4998' (length=4)
public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37)
[1] => stdClass Object
public 'id_thumb' => string '4997' (length=4)
public 'thumb_path'=> string 'http://lorempixel.com/250/150/?87585' (length=36)
public 'id_image' => string '4997' (length=4)
public 'image_path' => string 'http://lorempixel.com/1024/768/?76756' (length=37)
........................
) )
Thank you in advance 先感谢您
For me, you should combine only id_thumb
as id_thumbs
instead of all image data into images
column. 对我来说,您应该只将
id_thumb
组合为id_thumbs
而不是将所有图像数据组合到images
列中。 For example: 例如:
function get_latest($id)
{
$this->db->select('products.*,product_pictures.*');
$this->db->select('GROUP_CONCAT(product_pictures.id_thumb) as id_thumbs',FALSE);
$this->db->from('products');
$this->db->join('products_pictures', 'products_pictures.id_product = products.id_product', 'left');
$this->db->order_by('date_c', 'DESC');
$this->db->group_by('id_product');
$this->db->limit($id);
$query = $this->db->get();
return $query->result();
}
And in your model make a function called as get_image_data_by_id_thumb
as below: 然后在模型中创建一个名为
get_image_data_by_id_thumb
的函数,如下所示:
function get_image_data_by_id_thumb($id_thumb='')
{
if($id_thumb=='')
{
return false;
}
$this->db->where('id_thumb', $id_thumb);
$this->db->join('images', 'images.id_image = thumbs.id_image', 'left');
$sql = $this->db->get('thumb');
$obj = $sql->row();
if($obj)
{
return $obj;
}
}
The output will be: 输出将是:
0 =>
object(stdClass)[35]
public 'id_product' => string '1000' (length=4)
public 'name' => string 'Graham Corners' (length=14)
public 'description' => string 'Et ea quaerat totam temporibus quis. Ut fugiat blanditiis vel corporis minus veniam. Consequatur corporis sint sed assumenda itaque ratione ipsum distinctio. Voluptate autem quo sunt rerum.' (length=189)
public 'date_c' => string '2015-12-28 03:12:59' (length=19)
public 'date_u' => null
public 'id_category' => string '7' (length=1)
public 'id_user' => string '173' (length=3)
public 'alias' => string 'graham-corners' (length=14)
public 'active' => string '1' (length=1)
public 'id_thumbs' => '4998,4997,...'
Then you can fetch back by get image data by id_thumb
using explode method: 然后,您可以使用explode方法通过
id_thumb
获取图像数据来id_thumb
:
$arr_id_thumbs = explode(",",$id_thumbs);
foreach($arr_id_thumbs as $row)
{
$obj_image_data = $this->model_name->get_image_data_by_id_thumb($id_thumb);
$thumb_path = $obj_image_data->thumb_path;
$image_path = $obj_image_data->image_path;
.......................
}
Hope it helps. 希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.