2012-04-16 18 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

一般的に言えば、このコードは少しわかりにくいです。コメントはどこにありますか? 2つ以上のテーブルを含むいくつかの操作を行っているようですが、正確には何か分かりません。

いくつかの考え:

あなたは$ insert_rp_ids1の上に二回ループしている - あなたはこれらのループをマージすることができますか?明確なINSERT、UPDATEおよびDELETEセクションを持つ方がよいでしょう。コメントはIMOで明確にラベル付けされています。

削除が成功した場合にのみ挿入します。なぜどちらにも挿入しないでください。

さらに、変数名の一部は少し不透明です。とにかく$ rps_each2と$ insert_rp_ids1は何ですか? $ listOfProductIDsToInsertのような名前は、より記述的で、将来的にはより保守的です。特に、誰かがこのコードを処理しなければならない場合は特にそうです。

あなたのインデントはちょっと面白いです。これはコピー/ペーストエラーではないと仮定し、コードを読みやすくするために重要なので、修正が必要です。

これ以外にも、SQLは非常にコンパクトで効率的です。

関連する問題