使用多个索引对mysql json对象求和

h5qlskok  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(452)

在从数据库中选择json数据时,我遇到了一个问题。有没有一种方法可以按索引提取数据。
我之所以需要它,是因为我想按json项的名称求和和和分组,如果我使用以下方法从数组中提取第一个项,就可以实现这一点:

DB::raw('JSON_UNQUOTE(JSON_EXTRACT(resources, "$[0].name[0]")) as brand_name'), 
DB::raw('JSON_UNQUOTE(JSON_EXTRACT(resources, "$[0].brand_id[0]")) as brand_id'),
DB::raw('SUM(JSON_EXTRACT(resources, "$[0].quantity[0]")) as quantity')

然后我将按$[0].name[0]分组,得到唯一的结果。
存储在sql中的数据:

[[{\"name\": \"Product 1\", \"brand_id\": \"2\", \"quantity\": 2}, 
{\"name\": \"Product 2\", \"brand_id\": \"3\", \"quantity\": 1}], 

[{\"name\": \"Product 3\", \"brand_id\": \"1\", \"quantity\": 2}, 
{\"name\": \"Product 1\", \"brand_id\": \"2\", \"quantity\": 5}], 

[{\"name\": \"Product 4\", \"brand_id\": \"4\", \"quantity\": 2}, 
{\"name\": \"Product 5\", \"brand_id\": \"5\", \"quantity\": 5}]]

如果你明白我的意思,我应该把所有同名产品的数量加起来,得到唯一的回答,而不是多个同名产品。例如,应该只有一个
总数量为7的产品1。

jvlzgdj9

jvlzgdj91#

假设您可以获取原始json字符串:

$rawjson = '[[{\"name\":\"Product 1\",\"brand_id\": \"2\",\"quantity\": 2},{\"name\":\"Product 2\",\"brand_id\": \"3\",\"quantity\": 1}],[{\"name\": \"Product 3\", \"brand_id\": \"1\",\"quantity\": 2},{\"name\": \"Product 1\", \"brand_id\": \"2\", \"quantity\": 5}],[{\"name\": \"Product 4\", \"brand_id\": \"4\",\"quantity\": 2},{\"name\": \"Product 5\", \"brand_id\": \"5\",\"quantity\": 5}]]';

$master = json_decode(stripslashes($rawjson), true);

$p1Sum = 0;
$p2Sum = 0;
$p3Sum = 0;
$p4Sum = 0;

foreach ($master as $subitems) {
    foreach ($subitems as $item) {
      $itemName = $item['name'];
      switch($itemName){
      case 'Product 1':
        $p1Sum += $item['quantity'];
        break;
       case 'Product 2':
        $p2Sum += $item['quantity'];
        break;
       case 'Product 3':
         $p3Sum += $item['quantity'];
         break;
       case 'Product 4':
         $p4Sum += $item['quantity'];
         break;
      }

    }
}

echo 'Product 1: ' . $p1Sum . "\r\n";
echo 'Product 2: ' . $p2Sum . "\r\n";
echo 'Product 3: ' . $p3Sum . "\r\n";
echo 'Product 4: ' . $p4Sum . "\r\n";

将为您提供:

Product 1: 7
Product 2: 1
Product 3: 2
Product 4: 2

相关问题