Как вставить данные в таблицу в соответствии со значением объекта Json с помощью PHP и Mysql

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

Мне нужна одна помощь. Мне нужно вставить несколько данных в соответствии с некоторым значением объекта Json в таблицу с использованием PHP и MySQL. Я объясняю свой код ниже.

 $commnt=[{
   'day_id':2,
   'comment':'vodka1'
},{
  'day_id':3,
  'comment':'vodka2'
}
]

$result=[{
    'day_id':1,
    'restaurant':'193'
},{
  'day_id':2,
  'restaurant':'193'
},{
  'day_id':3,
  'restaurant':'193'
}
]
 

Здесь мне нужно ввести все данные из обоих объектов Json в приведенную ниже таблицу согласно day_id . Я объясняю столбец моей таблицы ниже.

db_details:

 id   day_id   restaurant  comment
 

Здесь мое требование заключается в том, когда day_id же соответствующее comment значение поля будет введено в таблицу, в противном случае comment поданное значение останется пустым.Ожидаемый результат приведен ниже.

 id    day_id   restaurant   comment

1       1        193               

2       2        193         vodka1

3       3        193         vodka3
 

Мой запрос приведен ниже.

 $insertintodetails=mysqli_query($connect,'INSERT INTO db_details
(day_id,restaurant,comment) values ("'. $result.'","'.$result[$i]['restaurant'].'","'.$commnt[$i]['comment'].'")');
 

Здесь может быть много вариантов использования, например, длина обоих объектов Json может быть одинаковой или разной, но комментарий должен быть вставлен в соответствии day_id с, иначе он останется пустым. В моем запросе я не могу вставить в соответствии с требованиями. Пожалуйста, помогите мне решить эту проблему.

Комментарии:

1. $commnt — это не массив, это объект json

2. где ваш array ()

3. Извините, пожалуйста, проверьте мой обновленный пост.

4. все еще это json.

5. вы можете использовать json_decode для некоторого преобразования в массив

Ответ №1:

 $newArray = $insertintodetails = array();
foreach($result as $rs)
{
  $newArray[$rs->day_id] = [
    "`day_id`=>'{$rs->day_id}'",
    "`restaurant`=>'{$rs->restaurant}'"
];
}
foreach($commnt as $rs){
  $newArray[$rs->day_id][] = "`comment`='{$rs->comment}'";
}
foreach($newArray as $rs){
  $insertintodetails[]=mysqli_query($connect,'INSERT INTO db_details SET '.implode(',',$rs));
}
 

Комментарии:

1. я проверю и дам вам знать.

2. @ hackout : в вашем коде отсутствует некоторый foreach {} .

3. это не работает, проверьте свой код должным образом. Грядет много ошибок.

Ответ №2:

Я создаю пример из приведенных выше деталей вашего вопроса. Вы можете попробовать приведенный ниже код. И это должно сработать для вас…

 //For example taken array and convert it to JSON    
$comment = json_encode(array(array('day_id' => '2', 'comment' => 'vodka1'), array('day_id' => '3', 'comment' => 'vodka2')));
$result = json_encode(array(array('day_id' => '1', 'restaurant' => '193'), array('day_id' => '2', 'restaurant' => '193'), array('day_id' => '3', 'restaurant' => '193')));

//Convert JSON to array...
$arrComment = json_decode($comment, true);
$arrResult = json_decode($result, true);

foreach($arrResult AS $keyResult => $dataResult){
    $day_id = $dataResult['day_id'];//day_id
    $restaurant = $dataResult['restaurant'];//rasturant
    $strComment = '';//comment
    //Check and extract comment value from multi dimensional comment($arrComment) array...
    if($getComment = find_comment_with_dayid($arrComment, $day_id)){
      $strComment = $getComment;
    }

    //Insert records...
    $insertintodetails=mysqli_query($connect,'INSERT INTO db_details
(day_id, restaurant, comment) values ("'. $day_id .'","'. $restaurant .'","'. $strComment .'")');
}


//Function will return comment for matched day_id
function find_comment_with_dayid($arrComment, $fieldKey) {
    foreach($arrComment as $indCommenr => $dataComment) {
        //Check for day_id, matched then return comment...
        if($dataComment['day_id'] == $fieldKey) return $dataComment['comment'];
    }
    return FALSE;
}
 

Здесь я взял пример массива, чтобы избежать проблемы с JSON, о которой сообщалось в вашем вопросе. Надеюсь, это сработает хорошо!

Комментарии:

1. Нет, он работает правильно. {"day_id":"2","restaurant":"193","comment":""} поставляется с пустым значением комментария.

2. Это можно было бы значительно улучшить, объединив строки для вставки в один оператор вместо одного INSERT оператора для каждой строки. Хотя это может не иметь большого значения для небольших наборов данных, это может быть очень полезно по мере расширения приложения. Итак, на данный момент -1, но если вы отредактируете свой пост, я пересмотрю его. Для получения дополнительной информации см. Справочный раздел MySQL о INSERT