我有一個表結構META_ID | KEY | VALUE | USER_ID,其中META_ID是自動遞增的。現在,在我的PHP邏輯我真的需要一個自動增量ID列嗎?
1每位用戶可獲得
2的結果鍵值對刪除每個用戶的鍵值行
3更新或插入的鍵值對的已知USER_ID
4插入新用戶的鍵值對
但META_ID不斷增長,所以我想知道如果我可以只刪除META_ID列?
案例邏輯
的註冊用戶或返回註冊用戶可以更新他們的形式隨着時間的推移,如果他們還沒有提交它。因此,超時用戶可以選擇和取消選擇某些表單選項並觸發更新,插入或刪除操作。 現在,「返回用戶取消選擇一個鍵(並且該行需要被刪除)背後的邏輯」給我一個問題。這就是爲什麼我只是刪除所有用戶鍵值對。但是,正確的方法是什麼?
因此,如果鍵值存在於數據庫表中,但不在$ 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;
}
tx我不知道「隱式」主鍵。我只是想防止大數字的ID像1002093.我不知道有多大的ID可以。我添加了我的功能,也許你可以發現我的錯誤邏輯? – alex 2014-10-01 09:57:48
我不是程序員,但我可以告訴你,你不必擔心數字太大。如果它是一個簡單的有符號整數,它可以大到2147483647.在大多數情況下應該足夠了。 – fancyPants 2014-10-01 10:02:36