Atualizar vs Inserir lógica, mas a última chave está sempre inserida?

Eu adicionei uma tabela db personalizada que se parece com uma tabela usermeta, apenas armazenando alguns pares chave-valor. Mas agora estou preso com a seguinte lógica

  1. uma chave / / existe existe para um usuário usar uma consulta de atualização mais uma consulta de inserção
  2. b / se uma chave não existe ANYMORE exclua a linha do valor-chave

Agora, para parte ai, tenha essa function, mas parece que a última chave é ignorada e sempre inserida.

`function insertUserShoppingMetaData($params) { global $wpdb; $shopping_meta_table = 'wp_shopping_metavalues'; $wp_user_id = $_POST['wp_user_id']; foreach ($params as $key => $val) { if ($key != "wp_user_id") { if (is_array($val)) { $val = json_encode($val); } $shopping_meta_values = array( 'wp_user_id' => $wp_user_id, 'meta_shopping_key' => $key, 'meta_shopping_value' => $val ); $shopping_meta_where = array('meta_shopping_key' => $key, 'wp_user_id' => $wp_user_id); } $result = $wpdb->get_results("SELECT * FROM $shopping_meta_table WHERE meta_shopping_key = '".$key."' AND wp_user_id = '$wp_user_id'") ; if(count($result) > 0){//KEY ALREADY EXISTS FOR USER $return = $wpdb->update($shopping_meta_table, array('meta_shopping_value' => $val), $shopping_meta_where).'
'; } else {//NEW KEY VALUE SO INSERT $return = $wpdb->insert($shopping_meta_table, $shopping_meta_values).'
'; } } echo 'Test return: ' . $return; }`

Onde meu loop está errado?

OU devo simplesmente excluir todos os pares de valores-chave e usar uma consulta de inserção? Um inconveniente em que eu posso pensar é o campo da tabela de meta_id que é auto-incremento e pode ficar realmente feio

Solutions Collecting From Web of "Atualizar vs Inserir lógica, mas a última chave está sempre inserida?"

Ok, aqui está a minha function alterada, mas esta não funciona, mas talvez você possa ver para onde eu vou mal

 function insertUserShoppingMetaData($params) { global $wpdb; $shopping_meta_table = 'wp_shopping_metavalues'; $wp_user_id = $params['wp_user_id']; $checkKeyValues = $wpdb->get_results("SELECT meta_shopping_key FROM $shopping_meta_table WHERE wp_user_id = '$wp_user_id'"); //print_r($checkKeyValues); foreach ($params as $key => $val) { foreach($checkKeyValues as $check){ //UPDATE OR INSERT if (($check->meta_shopping_key == $key) AND ($key != "wp_user_id")) { if (is_array($val)) { $val = json_encode($val); } $shopping_meta_values = array( 'wp_user_id' => $wp_user_id, 'meta_shopping_key' => $key, 'meta_shopping_value' => $val ); $shopping_meta_where = array('meta_shopping_key' => $key, 'wp_user_id' => $wp_user_id); $result = $wpdb->get_results("SELECT * FROM $shopping_meta_table WHERE meta_shopping_key = '" . $key . "' AND wp_user_id = '$wp_user_id'"); if (count($result) > 0) {//KEY ALREADY EXISTS FOR USER $return = $wpdb->update($shopping_meta_table, array('meta_shopping_key' => $key, 'meta_shopping_value' => $val), $shopping_meta_where) . '
'; } else {//KEY IS NEW $return = $wpdb->insert($shopping_meta_table, $shopping_meta_values) . '
'; } }//.end $key else { //KEY IS NOT SELECTED ANYMORE SO DELETE key value pair row $qdel = $wpdb->delete($shopping_meta_table,array('wp_user_id'=>$id)); $return = 'Deleted: '.$qdel; }//.end else { }//.end foreach checkKeyValue }//.end each echo 'Test return: ' . $return; }