2012-04-14 15 views
0

Iはrelated_products、 ​​が主生成物である設定解除特定値

ネーミングテーブルを有しています。

およびrelated_products_idsは、主生成物に関連する製品IDで構成されています。

-------------------------------------------- 
| products_id | related_products_ids | 
| ----------------------------------------- 
| 1   | 2,3     | 
| ----------------------------------------- 
| 2   | 1,3     | 
| ----------------------------------------- 
| 3   | 1,2     | 
------------------------------------------- 

私はチェックボックスがあり、

<input value="1" type="checkbox" name="rp_product[]" id="in-category1"> Microsoft IntelliMouse Pro 1 
<input value="2" type="checkbox" name="rp_product[]" id="in-category2"> Microsoft IntelliMouse Pro 2 
<input value="3" type="checkbox" name="rp_product[]" id="in-category3"> Microsoft IntelliMouse Pro 3 

チェックボックスは、PHPによって生成され

<?php 
    echo '<div class="categorydiv"><div id="category-all" class="tabs-panel"><ul id="categorychecklist" class="list:category categorychecklist form-no-clear">'; 
     $rp_sql = "select products_id, products_name from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id"; 
     $rp_1 = mysql_query($rp_sql); 
      while($rp_2 = mysql_fetch_array($rp_1)) { 
      echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"in-category-1\"> ".$rp_2['products_name']."</label></li>"; 
      } 
    mysql_free_result($rp_1); 
    echo '</ul></div></div>'; 
    ?> 

と私は

related_productsテーブルにチェックし、チェックボックスを保存するには、このコードを使用します
for ($i=0; $i<count($_POST['rp_product']); $i++) 
{ 
    $check_val1 .= $_POST['rp_product'][$i] .","; //gather data 
} 
$check_val = trim($check_val1, ','); //clean last , 
unset($check_val1); //flush 

$related_products = array('products_id' => (int)$products_id, 
         'related_products_ids' => $check_val); 

$insert_rp_ids1 = explode(',', $check_val); 

    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)) 
    { 
     $related_products_value = mysql_fetch_assoc($result_rp); 
     $check_dup = explode(',', $related_products_value['related_products_ids']); 
     $rp_values = $related_products_value['related_products_ids'] . "," . $products_id; 

     $rps_each1 = array('related_products_ids' => $rp_values); 
     if(!in_array($products_id, $check_dup)) { 
     $wpdb->update(TABLE_RELATED_PRODUCTS, $rps_each1, array('products_id' => $rp_ids)); 
     } 
    } 
     else 
      { 
       $rps_each2 = array('products_id' => $rp_ids, 'related_products_ids' => $products_id); 
       $wpdb->insert(TABLE_RELATED_PRODUCTS, $rps_each2); 
      } 
    } 

私は何がしたいことは、私が選択解除..

はイムはidが2あるポストを編集し、どこのrelated_products_ids1,3であると言うことができます。.. unsetに以前に選択したチェックボックスが選択解除されrelated_products_ids列の下に特定のIDですチェックボックスの値が3related_products_idsにあります)であり、保存ボタンを押した後にrelated_products_idsの値3が設定解除されるので、現在の値は1です。どうやってするか?私は考えることができず、これに対する解決策を見つけることができません。

助けてください。

答えて

1

あなたはが必要です。あなたのデータベースを正規化してください。カンマ区切りの値をデータベースに格納することは決して良い考えではありません。

このような正規化されていないデータベースの主な問題は、データを簡単に操作できないことです。

このように格納する代わりに、関連する製品を格納するための親子テーブルを作成する必要があります。

+0

これは私が現在知っている解決策です。できるだけ新しいソリューションを開発するのに役立つことができますか?ありがとうございました。 – Ken

+0

@Kenスキームを変更して、 'related_product_ids'列に値が1つだけ格納されるようにします(列名も変更する必要があります)。各行が1つの関係(1-2,1-3など)を表すようにします。 1-2と2-1を別々に保存する必要があるかどうかを検討する必要があります(これはドメインロジックに依存します)。 – liquorvicar

関連する問題