1

So I am trying to get a single item data like itemID, itemSKU etc. from multiple tables. And display in the view. The example item I provided down below has three images attached.If I use return $query->row_array(); I will get only one row returned. If I use $query->result_array(), I will get three rows returned. For single item page, I don't want to use foreach to display the result.

My Model

$this->db->join('itemsToCats', 'items.itemID = itemsToCats.itemId','left');
        $this->db->join('categories', 'itemsToCats.catId = categories.ctgID', 'left');
        $this->db->join('itemImg', ' items.itemID = itemImg.itemID', 'left');
        $this->db->select('items.itemID, itemSKU, itemName, itemSDesc, addDate, chgDate, ctgID, ctgName, parentID, itemImg');      
        $query = $this->db->get_where('items', array('items.itemID' => $itemID));
        return $query->row_array();

Output

Array
(
    [itemID] => 521
    [itemSKU] => image part number
    [itemName] => multiple images
    [itemSDesc] => 
    [addDate] => 2018-07-12 16:17:09
    [chgDate] => 0000-00-00 00:00:00
    [ctgID] => 67
    [ctgName] => Pipe Bending
    [parentID] => 46
    [itemImg] => 234-gy_hello1.png
)

If I use return $query->result_array() I get this:

Array
(
    [0] => Array
        (
            [itemID] => 521
            [itemSKU] => image part number
            [itemName] => multiple images
            [itemSDesc] => 
            [addDate] => 2018-07-12 16:17:09
            [chgDate] => 0000-00-00 00:00:00
            [ctgID] => 67
            [ctgName] => Pipe Bending
            [parentID] => 46
            [itemImg] => 234-gy_hello1.png
        )

    [1] => Array
        (
            [itemID] => 521
            [itemSKU] => image part number
            [itemName] => multiple images
            [itemSDesc] => 
            [addDate] => 2018-07-12 16:17:09
            [chgDate] => 0000-00-00 00:00:00
            [ctgID] => 67
            [ctgName] => Pipe Bending
            [parentID] => 46
            [itemImg] => cac1f0ad0720ac05e76fd990de2d309e.png
        )

    [2] => Array
        (
            [itemID] => 521
            [itemSKU] => image part number
            [itemName] => multiple images
            [itemSDesc] => 
            [addDate] => 2018-07-12 16:17:09
            [chgDate] => 0000-00-00 00:00:00
            [ctgID] => 67
            [ctgName] => Pipe Bending
            [parentID] => 46
            [itemImg] => eee779a15e340e2a0f4d0b682e900862.png
        )

)

What I want is this:

Array
(
    [itemID] => 521
    [itemSKU] => image part number
    [itemName] => multiple images
    [itemSDesc] => 
    [addDate] => 2018-07-12 16:17:09
    [chgDate] => 0000-00-00 00:00:00
    [ctgID] => 67
    [ctgName] => Pipe Bending
    [parentID] => 46
    [itemImg] => Array
        (
            [0] => 234-gy_hello1.png
            [1] => cac1f0ad0720ac05e76fd990de2d309e.png
            [2] => eee779a15e340e2a0f4d0b682e900862.png
        )
)

Is there some SQL trick I can use to achieve the data structure, or I need to modify the result data in the model? Thank you!

1
  • If you can find a safe separator character, you could GROUP BY itemID and select GROUP_CONCAT(itemImg SEPARATOR '<somecharacter>') and then explode() the itemImg value in the result set. Commented Jul 13, 2018 at 6:20

1 Answer 1

2

Hope this will help you :

You can modify your result array like this :

$this->db->join('itemsToCats', 'items.itemID = itemsToCats.itemId','left');
$this->db->join('categories', 'itemsToCats.catId = categories.ctgID', 'left');
$this->db->join('itemImg', ' items.itemID = itemImg.itemID', 'left');
$this->db->select('items.itemID, itemSKU, itemName, itemSDesc, addDate, chgDate, ctgID, ctgName, parentID, itemImg');      
$query = $this->db->get_where('items', array('items.itemID' => $itemID));
if ($query->num_rows() > 0 )
{
  foreach ($query->result_array() as $key => $item) 
  {
    $data['itemID'] = $item['itemID'];
    $data['itemSKU'] = $item['itemSKU'];
    $data['itemName'] = $item['itemName'];
    $data['itemSDesc'] = $item['itemSDesc'];
    $data['addDate'] = $item['addDate'];
    $data['chgDate'] = $item['chgDate'];
    $data['ctgID'] = $item['ctgID'];
    $data['ctgName'] = $item['ctgName'];
    $data['parentID'] = $item['parentID'];

    $data['itemImg'][$key] = $item['itemImg'];
  }
}
//print_r($data);die;
return $data;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.