Same Id but multiple different product in SQL. Data should be retrieved from SQL and Output should be shortened to one line for each ID using PHP.
EXAMPLE:
SQL
ID | Product |
---|---|
001 | Laptop |
001 | Monitor |
001 | Speaker |
002 | Phone |
003 | Other Services |
Expected Output
PHP
ID | Product |
---|---|
001 | Laptop, Monitor, Speaker |
002 | Phone, Case |
003 | Other Services |
MY CODE
$sql = "SELECT id, product From Stock";
$result = mysqli_query($conn, $sql);
while ($row = $result->fetch_array()){
$id[] = $row["id"];
$product[] = $row["product"];
}
$max_id = count($id);
$duplicate_id = array();
for($i=0; $i<$max_id;$i ){
$duplicate_m[$id[$i]] = $id[$i] = $product[$i];
}
print_r($duplicate_m);
CURRENT OUTPUT
[001] => Laptop
[002] => Phone
[003] => Other Services
CodePudding user response:
change your code to this
for($i=0; $i<$max_id;$i ){
if(!isset($duplicate_m[$id[$i]])){
$duplicate_m[$id[$i]] = $id[$i] = $product[$i];
}else{
$duplicate_m[$id[$i]] .= ", {$product[$i]}";
}
}
CodePudding user response:
Depending on your version of sql server, you can use string_agg
function
$sql = "select id, string_agg(product, ',') from Stock group by id"
Should return your data in the way you want, without transformations in PHP code.
For other versions you can check this other question in SO with the needed code => ListAGG in SQLSERVER
CodePudding user response:
You use associative array, and override the values of the $duplicate_m
array.
You should check if key exists, and then save the element. Also, you should use multidimensional array.
So
for($i=0; $i<$max_id;$i ){
if(!isset($duplicate_m[$id[$i]])){
duplicate_m[$id[$i]] = [];
duplicate_m[$id[$i]][] = $product[$i];
} else {
duplicate_m[$id[$i]][] = $product[$i];
}
}