Reputation:
I have a cart table that looks like this
id catid catname userid productid prodimg prodname prodsize prodcost quantity datee timee totalamount
1 1 CN1 1 1 ABC P1 small 10 1 3/10/2015 10:00am 10
2 1 CN1 1 1 ABC P1 medium 20 1 4/10/2015 10:00am 20
3 1 CN1 1 1 ABC P1 large 30 1 3/10/2015 10:00am 30
4 1 CN1 1 1 ABC P1 perpiece 5 1 3/10/2015 10:00am 5
5 1 CN1 1 2 CDF P2 small 6 1 3/10/2015 10:00am 6
6 1 CN1 1 2 CDF P2 large 14 1 4/10/2015 10:00am 14
7 1 CN1 2 1 ABC P1 small 10 2 3/10/2015 10:00am 20
I wish to display its data in an array (according to userid )in a particular manner, the resulting array that i want would look like this
Array
(
[0] => Array
(
[catid] => 1
[catname] => CN1
[userid] => 1
[productid] => 1
[prodimg] => ABC
[prodname] => P1
[prodsize] => Array
(
[0] => small
[1] => medium
[2] => large
[3] => perpiece
)
[prodcost] => Array
(
[0] => 10
[1] => 20
[2] => 30
[3] => 5
)
[quantity] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
)
[datee] => Array
(
[0] => 3/10/2015
[1] => 4/10/2015
[2] => 3/10/2015
[3] => 3/10/2015
)
[timee] => Array
(
[0] => 10:00am
[1] => 10:00am
[2] => 10:00am
[3] => 10:00am
)
[totalamount] => Array
(
[0] => 10
[1] => 20
[2] => 30
[3] => 5
)
)
[1] => Array
(
[catid] => 1
[catname] => CN1
[userid] => 1
[productid] => 2
[prodimg] => CDF
[prodname] => P2
[prodsize] => Array
(
[0] => small
[1] => 0
[2] => large
[3] => 0
)
[prodcost] => Array
(
[0] => 6
[1] => 0
[2] => 14
[3] => 0
)
[quantity] => Array
(
[0] => 1
[1] => 0
[2] => 1
[3] => 0
)
[datee] => Array
(
[0] => 3/10/2015
[1] => 0
[2] => 4/10/2015
[3] => 0
)
[timee] => Array
(
[0] => 10:00am
[1] => 0
[2] => 10:00am
[3] => 0
)
[totalamount] => Array
(
[0] => 6
[1] => 0
[2] => 14
[3] => 0
)
)
)
code that i used is
$userid = $_REQUEST['userid'];
$sql= "SELECT catid, catname, productid, prodimg, GROUP_CONCAT(prodsize ORDER BY id ASC) as prodsize, GROUP_CONCAT(prodcost ORDER BY id ASC) as prodcost, GROUP_CONCAT(quantity ORDER BY id ASC) as quantity, GROUP_CONCAT(datee ORDER BY id ASC) as datee, GROUP_CONCAT(timee ORDER BY id ASC) as timee,
GROUP_CONCAT(totalamount ORDER BY id ASC) as totalamount from cart WHERE userid ='$userid'";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0)
{
while($result = mysqli_fetch_assoc($result))
{
echo "<pre>";
print_r($result);
echo "</pre>";
}
}
but it didnt show the array in the way i wanted, it showed the following array
Array
(
[0] => Array
(
[catid] => 1
[catname] => CN1
[productid] => 1
[prodimg] => ABC
[prodsize] => small,medium,large
[prodcost] => 10,20,30
[quantity] => 1,1,1,1
[datee] => 3/10/2015,4/10/2015,3/10/2015,3/10/2015
[timee] => 10:00am,10:00am,10:00am,10:00am
[totalamount] => 10,20,30,5
)
)
can anyone please tell how to get the array in correct manner. One more important aspect of this array is that the array within prodsize should be fixed, i.e if the prod size is small then it will be stored in [0], medium in [1], large in[2] and perpiece in[3], if one of these values is not present then it should be 0 and prodcost, quantity datee and timee will also follow the same method
Upvotes: 2
Views: 118
Reputation: 1853
I think you need al algorithm to reformat the results from the database. I can see all you want is to get those concatenated results and separate them in independent array keys.
I haven't been able to try it, but I suspect you might or might not need the $i index to allocate the elements. Try both.
Here's a way you might achieve that:
$formatedResult = [];
$i = 0;
while($result = mysqli_fetch_assoc($result))
{
$formatedResult = $result;
$formatedResult[$i]['prodsize'] = explode(',', $result[$i]['prodsize']);
$formatedResult[$i]['prodcost'] = explode(',', $result[$i]['prodcost']);
$formatedResult[$i]['quantity'] = explode(',', $result[$i]['quantity']);
$formatedResult[$i]['datee'] = explode(',', $result[$i]['datee']);
$formatedResult[$i]['timee'] = explode(',', $result[$i]['timee']);
$formatedResult[$i]['totalamount'] = explode(',', $result[$i]['totalamount']);
//Repeat with the other elements with similar formating
$i++;
}
echo '<pre>';
print_r($formatedResult); //Now shows the array you want
echo '</pre>';
Upvotes: 1
Reputation: 1958
To get all results of sql select query in an array , just use fetch all function as below
$userid = $_REQUEST['userid'];
$sql= "SELECT catid, catname, productid, prodimg,
GROUP_CONCAT(prodsize ORDER BY id ASC) as prodsize,
GROUP_CONCAT(prodcost ORDER BY id ASC) as prodcost,
GROUP_CONCAT(quantity ORDER BY id ASC) as quantity,
GROUP_CONCAT(datee ORDER BY id ASC) as datee,
GROUP_CONCAT(timee ORDER BY id ASC) as timee,
GROUP_CONCAT(totalamount ORDER BY id ASC) as totalamount
from cart WHERE userid ='$userid'";
$result = mysqli_query($con, $sql);
// Fetch all
$r=mysqli_fetch_all($result,MYSQLI_ASSOC);
print_r($r);
// Free result set
mysqli_free_result($result);
Upvotes: 0