我有一个带有META_ID |的表结构KEY |价值| USER_ID其中META_ID是自动递增的。现在在我的php逻辑
1获取每个用户的结果键值对
2删除每个用户的键值行
3更新或插入已知USER_ID的键值对
4为新用户插入键值对
但是META_ID不断增长,所以我想知道我是否可以删除META_ID列?
案例逻辑
注册用户或返回的注册用户如果尚未提交表格,可以随时更新表格。因此超时用户可以选择和取消选择某些表单选项并触发更新,插入或删除。 现在,“返回用户取消选择一个键(并且需要删除该行)”背后的逻辑“给我一个问题。这就是我删除所有用户键值对的原因。但是什么是正确的方式?
因此,如果键值存在于db表中但不存在于$ params中,我需要删除它!
这是我的功能
function user_shopping_meta_data($params) {
global $wpdb;
$shopping_meta_table = 'wp_shopping_metavalues';
$wp_user_id = $params['wp_user_id'];
//1 CHECK IF USER HAS KEY VALUE PAIRS
$checkKeyValues = $wpdb->get_results("SELECT meta_shopping_key FROM $shopping_meta_table WHERE wp_user_id = '$wp_user_id'");
//2 WE DELETE
$qdel = $wpdb->delete($shopping_meta_table, array('wp_user_id' => $wp_user_id));
//3 UPDATE OR INSERT
foreach ($params as $key => $val) {
//variables
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
);
if (count($checkKeyValues) > 0) {//3 USER IS KNOWN SO UPDATE and/or INSERT new key-value
foreach ($checkKeyValues as $check) {
//UPDATE OR INSERT
if (($key != "wp_user_id")) {
//FOR UPDATE where
$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) . '<br/>';
//$return .= 'UDPATE<br/>';
} else {//KEY IS NEW
$return .= $wpdb->insert($shopping_meta_table, $shopping_meta_values) . '<br/>';
// $return .= 'INSERT for old';
}
}//.end $key
}//.end foreach checkKeyValue
}//.end count
else {//4 INSERT KEY VALUE PAIR FOR NEW USER
if (($key != "wp_user_id")) {
$return .= $wpdb->insert($shopping_meta_table, $shopping_meta_values) . '<br/>';
// $return .= 'INSERT NEW';
}
}
}//.end each
echo 'Test return: ' . $return;
}
答案 0 :(得分:2)
删除它不会获得太多收益。你可能会认为你节省了一些空间,但事实上你并没有。 auto_increment列始终也是主键的一部分。如果删除它,MySQL将创建一个&#34;隐式&#34;主键,它不可见但是MySQL需要识别行。你也会因为无法使用LAST_INSERT_ID()
而失去一些安慰。
答案 1 :(得分:-1)
你可以删除它。这只是一个独特的ID。如果您可以在没有META_ID的情况下区分不同的行,或者您不需要区分行,那么META_ID就是多余的。
答案 2 :(得分:-1)
如果我能给你一个建议,最好把这个领域留作历史。 如果您需要知道为该用户执行的最后一个操作是什么,您可以通过META_ID订购。 在表中使用主键很有用。但这只是一个建议
答案 3 :(得分:-1)
我建议你有一个主键,你确信它是独一无二的。为此使用自动增量列是个好主意,因为您始终确保它是唯一的。