2012-04-16 36 views
0

我想盡量減少sql查詢,以便在我的服務器上節省一些負載。我有這個MySQL查詢提交表單時,一種最小化我的sql查詢的方法

$updateglobal_products_data = array(
         'products_type' => tep_db_prepare_input($HTTP_POST_VARS['products_type']), 
         'global_category_id' => tep_db_prepare_input($HTTP_POST_VARS['global_categories']), 
         'display_product' => tep_db_prepare_input($HTTP_POST_VARS['display_product']), 
         'products_description' => tep_db_prepare_input(strip_tags($HTTP_POST_VARS['products_description'][1])), 
         'products_name' => tep_db_prepare_input(stripslashes($HTTP_POST_VARS['products_name'][1])), 
         'products_image' => $products_image->filename, 
         'products_last_modified' => tep_db_prepare_input($gcurrent_datetime), 
         'products_quantity' => (int)tep_db_prepare_input($HTTP_POST_VARS['products_quantity']), 
         'products_model' => tep_db_prepare_input($HTTP_POST_VARS['products_model']), 
         'products_price' => $products_price, 
         'products_date_available' => $products_date_available, 
         'products_weight' => (float)tep_db_prepare_input($HTTP_POST_VARS['products_weight']), 
         'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']), 
         'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']), 
         'manufacturers_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id'])); 

$sql_data_array = array('products_quantity' => (int)tep_db_prepare_input($HTTP_POST_VARS['products_quantity']), 
         'products_type' => tep_db_prepare_input($HTTP_POST_VARS['products_type']), 
         'img_display' => tep_db_prepare_input($HTTP_POST_VARS['image_display']), 
         'products_model' => tep_db_prepare_input($HTTP_POST_VARS['products_model']), 
         'products_price' => tep_db_prepare_input($HTTP_POST_VARS['products_price']), 
         'products_date_available' => $products_date_available, 
         'products_weight' => (float)tep_db_prepare_input($HTTP_POST_VARS['products_weight']), 
         'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']), 
         'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']), 
         'manufacturers_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id'])); 

$update_sql_data = array('products_last_modified' => 'now()'); 
$sql_data_array = array_merge($sql_data_array, $update_sql_data); 

    $wpdb->update(TABLE_PRODUCTS, $sql_data_array, array('products_id' => $products_id)); 
    $wpdb->update(TABLE_GLOBAL_PRODUCTS, $updateglobal_products_data, array('blog_id' => $blog_id, 'products_id' => $products_id)); 

    $delete_rps = "DELETE from " . TABLE_RELATED_PRODUCTS . " where products_id = '" . $products_id . "'"; 
    $wpdb->query("DELETE from " . TABLE_RELATED_PRODUCTS . " where products_id = '" . $products_id . "'"); 

    if(mysql_query($delete_rps)) { 
    foreach($insert_rp_ids1 as $id){ 
    $rps_each2 = array('products_id' => $products_id, 'related_products_ids' => $id); 
    $wpdb->insert(TABLE_RELATED_PRODUCTS, $rps_each2); 
    } 
    } 

$wpdb->query("DELETE from " . TABLE_RELATED_PRODUCTS . " where related_products_ids = '" . $products_id . "'"); 

foreach($insert_rp_ids1 as $rp_ids) 
{ 

$result_rp = mysql_query("SELECT related_products_ids, products_id FROM ".TABLE_RELATED_PRODUCTS." where products_id = '" . $rp_ids ."'"); 
if(!mysql_num_rows($result_rp)) 
    { 
    $rps_each2 = array('products_id' => $rp_ids, 'related_products_ids' => $products_id); 
    $wpdb->insert(TABLE_RELATED_PRODUCTS, $rps_each2); 

    } 
} 

有沒有辦法最大限度地減少這些sql查詢?或者是我的代碼好嗎?

回答

0

一般來說,這段代碼有點難以理解。評論在哪裏?看起來你正在做多個涉及多個表的操作,但不清楚究竟是什麼。

的幾點思考:

你是循環兩次超過$ insert_rp_ids1 - 您可以合併這些循環?更好的是有獨特的INSERT,UPDATE和DELETE部分,清楚地標註IMO的評論。

只有在刪除成功時纔會插入。爲何不插入任何一種方式?

此外,您的一些變量名稱有點不透明。無論如何,$ rps_each2和$ insert_rp_ids1究竟是什麼?像$ listOfProductIDsToInsert這樣的名稱更具描述性,因此在未來更易於維護,尤其是在其他人必須處理此代碼時。

你的縮進有點有趣。假設這不是複製/粘貼錯誤,這使得代碼可讀,因此需要修復。

除此之外,你的SQL看起來非常緊湊和高效。