Index: trunk/core/units/general/cat_dbitem.php =================================================================== diff -u -r2041 -r2045 --- trunk/core/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 2041) +++ trunk/core/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 2045) @@ -117,7 +117,7 @@ $resource_id = $this->GetDBField('ResourceId'); $item_cats_sql = 'SELECT CategoryId FROM %s WHERE ItemResourceId = %s'; - $delete_category_items_sql = 'DELETE FROM %s WHERE ItemResourceId = %s'; + $delete_category_items_sql = 'DELETE FROM %s WHERE ItemResourceId = %s AND CategoryId IN (%s)'; $category_ids = $this->Conn->GetCol( sprintf($item_cats_sql, $ci_table, $resource_id) ); $cats_left = array_diff($category_ids, $delete_category_ids); @@ -131,11 +131,14 @@ } else { - $this->Conn->Query( sprintf($delete_category_items_sql, $ci_table, $resource_id) ); - if( count($cats_left) == 1 ) + $this->Conn->Query( sprintf($delete_category_items_sql, $ci_table, $resource_id, implode(',', $delete_category_ids) ) ); + + $sql = 'SELECT CategoryId FROM %s WHERE PrimaryCat = 1 AND ItemResourceId = %s'; + $primary_cat_id = $this->Conn->GetCol( sprintf($sql, $ci_table, $resource_id) ); + if( count($primary_cat_id) == 0 ) { $sql = 'REPLACE INTO %s (CategoryId,ItemResourceId,PrimaryCat) VALUES (%s,%s,1)'; - $this->Conn->Query( sprintf($sql, $ci_table, end($cats_left), $resource_id ) ); + $this->Conn->Query( sprintf($sql, $ci_table, reset($cats_left), $resource_id ) ); } } } Index: trunk/kernel/units/general/cat_dbitem.php =================================================================== diff -u -r2041 -r2045 --- trunk/kernel/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 2041) +++ trunk/kernel/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 2045) @@ -117,7 +117,7 @@ $resource_id = $this->GetDBField('ResourceId'); $item_cats_sql = 'SELECT CategoryId FROM %s WHERE ItemResourceId = %s'; - $delete_category_items_sql = 'DELETE FROM %s WHERE ItemResourceId = %s'; + $delete_category_items_sql = 'DELETE FROM %s WHERE ItemResourceId = %s AND CategoryId IN (%s)'; $category_ids = $this->Conn->GetCol( sprintf($item_cats_sql, $ci_table, $resource_id) ); $cats_left = array_diff($category_ids, $delete_category_ids); @@ -131,11 +131,14 @@ } else { - $this->Conn->Query( sprintf($delete_category_items_sql, $ci_table, $resource_id) ); - if( count($cats_left) == 1 ) + $this->Conn->Query( sprintf($delete_category_items_sql, $ci_table, $resource_id, implode(',', $delete_category_ids) ) ); + + $sql = 'SELECT CategoryId FROM %s WHERE PrimaryCat = 1 AND ItemResourceId = %s'; + $primary_cat_id = $this->Conn->GetCol( sprintf($sql, $ci_table, $resource_id) ); + if( count($primary_cat_id) == 0 ) { $sql = 'REPLACE INTO %s (CategoryId,ItemResourceId,PrimaryCat) VALUES (%s,%s,1)'; - $this->Conn->Query( sprintf($sql, $ci_table, end($cats_left), $resource_id ) ); + $this->Conn->Query( sprintf($sql, $ci_table, reset($cats_left), $resource_id ) ); } } }