# В задачи класса входят: # # * создавать # * уничтожать # * заполнять # * обновлять записи # # таблиц вида `c80_yax_strcat_#{NN}_items". class StrsubcatRuntimeTables def self.table_fill(strsubcat_id) # strh_table_fill # NOTE:: [columns] эти столбцы должны соответствовать (комментарий как wiki) # [0] item_props.prop_name_id, # [1] prop_names.title AS prop_name_title, # [2] item_props.value, # [3] items.id AS item_id, # [4] items.title as item_title, # [5] items.is_main, # [6] items.is_hit, # [7] items.is_sale, # [8] strsubcats.id AS strsubcat_id, # [9] strsubcats.slug AS strsubcat_slug # [10] vendors.id as vendor_id # [11] vendors.title as vendor_title - дублирующий столбец: чтобы не совершать # лишних запросов за vendor.title в методе hash_sql_make # [12] items.full_desc # [13] items.image # [14] items.is_ask_price # [15] `c80_yax_items`.`is_gift`, # [16] `c80_yax_items`.`is_starting`, # [17] `c80_yax_items`.`is_available` # выбираем свойства предметов вместе с инфой о предметах, которым они принадлежат # # NOTE:: [columns] эти столбцы должны соответствовать (запрос при заполнении таблицы) sql = " SELECT `c80_yax_item_props`.`prop_name_id`, `c80_yax_prop_names`.`title` AS prop_name_title, `c80_yax_item_props`.`value`, `c80_yax_items`.`id` AS item_id, `c80_yax_items`.`title` AS item_title, `c80_yax_items`.`is_main`, `c80_yax_items`.`is_hit`, `c80_yax_items`.`is_sale`, `c80_yax_strsubcats`.`id` AS strsubcat_id, `c80_yax_strsubcats`.`slug` AS strsubcat_slug, `c80_yax_vendors`.`id` AS vendor_id, `c80_yax_vendors`.`title` AS vendor_title, `c80_yax_items`.`full_desc`, `c80_yax_items`.`image`, `c80_yax_items`.`is_ask_price`, `c80_yax_items`.`is_gift`, `c80_yax_items`.`is_starting`, `c80_yax_items`.`is_available` FROM `c80_yax_items` INNER JOIN `c80_yax_strsubcats` ON `c80_yax_strsubcats`.`id` = `c80_yax_items`.`strsubcat_id` LEFT JOIN `c80_yax_item_props` ON `c80_yax_item_props`.`item_id` = `c80_yax_items`.`id` LEFT JOIN `c80_yax_prop_names` ON `c80_yax_prop_names`.`id` = `c80_yax_item_props`.`prop_name_id` LEFT JOIN `c80_yax_items_vendors` ON `c80_yax_items_vendors`.`item_id` = `c80_yax_items`.`id` LEFT JOIN `c80_yax_vendors` ON `c80_yax_vendors`.`id` = `c80_yax_items_vendors`.`vendor_id` WHERE (`c80_yax_strsubcats`.`id` = #{strsubcat_id}) " records = ActiveRecord::Base.connection.execute(sql) records # # 1. заполняем хэш объектами для составления sql-команд INSERT hash_sql = self.hash_sql_make(records, strsubcat_id) Rails.logger.debug '[TRACE] Начинаем заполнять таблицу:' self.hash_sql_execute(hash_sql) Rails.logger.debug '[TRACE] END' end =begin # выдать список вещей из указанной подкатегории (возможно, применяя фильтры) def strh_items_filter(strsubcat_id, page, per_page, sorting_type, filter_params = {}) # Rails.logger.debug "page = #{page}" # Rails.logger.debug "per_page = #{per_page}" table_name = "strcat_#{strsubcat_id}_items" Rails.logger.debug "[TRACE] START: #{table_name}, sorting_type = #{sorting_type}, filter_params = #{filter_params.to_json}" if ActiveRecord::Base.connection.table_exists?(table_name) ob = compose_sql_order_by(strsubcat_id,sorting_type) w = compose_where_sql(filter_params, table_name) sql = "SELECT * FROM #{table_name}#{w}#{ob}" # SELECT * FROM strcat_1_items # WHERE # strcat_1_items.prop_1 = '5 кг' # AND # strcat_1_items.prop_3 = '1450 кг/м3'; items = Item.paginate_by_sql(sql, :page => page, :per_page => per_page) Rails.logger.debug "[TRACE] END" else # сюда попадаем в исключительной ситуации - ошибка т.е. Rails.logger.debug "[ERROR] Нет таблицы с именем #{table_name}" items = Item.all.paginate(:page => 1, :per_page => 0) end items end =end =begin # от метода ожидается результат: хэш вида {"3"=>["900 кг/м3", "1450 кг/м3"], "5"=>["300 мм", "2300 x 1250 x 900"], "9"=>["20 %", "13%", "12%"]} def strh_collect_allowed_vals(strsubcat_id,filter_params={}) # filter_params = {"1"=>"5 кг", "3"=>"-1", "5"=>"-1", "9"=>"-1"} table_name = "strcat_#{strsubcat_id}_items" if ActiveRecord::Base.connection.table_exists?(table_name) s = 'SET SESSION group_concat_max_len = 102400000' ActiveRecord::Base.connection.execute(s) w = compose_where_sql(filter_params, table_name) g = compose_group_concat_sql(filter_params) sql = "SELECT id#{g} FROM #{table_name}#{w}" records_array = ActiveRecord::Base.connection.exec_query(sql) hsh = records_array.to_hash # Rails.logger.debug " Промежуточный hash: #{hsh}" # Rails.logger.debug "strh_collect_allowed_vals:: #{hsh}" # [{"id"=>3, "3"=>"95 г/м3,1450 кг/м3", "5"=>"2500 x 1200 x 800,2500 x 1200 x 800", "9"=>"0.51 %,0.51 %"}] # посчитаем, сколько фильтров используется # если используется один фильтр - зафиксируе его key # чтобы для него собрать все возможные значения # чтобы в