2016-07-21 2 views
0

Я собираюсь создать большой сайт с поддержкой нескольких столов в первый раз и надеялся, что сообщество рубинов поможет мне в правильном направлении указать, как это сделать.фильтры для поиска по нескольким столам

О приложении: У меня есть несколько больших таблиц (> 200k + строк и 30 столбцов для каждой таблицы). Столбцы между таблицами не совпадают, и если бы они пытались расширять длинный и широкий и сливались в одну таблицу, мои полные столбцы выходили бы из-под контроля. Поэтому создание моей главной таблицы в моей голове не представляется возможным. Все строки (наблюдения) таблиц связаны через unique_id. То, что я хотел сделать, и где я надеялся получить некоторые советы от этого сообщества, заключается в том, как я могу создать несколько критериев поиска, которые могут извлекать из разных таблиц.

Вот приведенный ниже пример того, что я хочу выполнить. В этом примере мы имеем table_1 и table_2 (обе таблицы приведены ниже). И скажем пользователь поиск по имени: Tim и тема: английского, чтобы видеть Тим английского класса: 78.

У меня не было никаких проблем, работающих с одним столом, но никогда не работал с несколькими таблицы, подключенные через один общий идентификатор. Опять же, помните, что это уменьшенная версия. Мои фактические таблицы очень большие, и я не могу создать одну таблицу без больших столбцов.

Как бы я мог убедиться, что фильтры способны к A: удерживать выбранную переменную, а B: пользователи ищут другие таблицы? Надеюсь, я объясню здесь. Заранее благодарю вас за любые указания или рекомендации, чтобы указать мне в правильном направлении.

TABLE_1   

Unique_ID Name Age  Sex 
    1  Tim  16  Male 
    2  Chris 15  Male 
    3  Brad 18  Male 
    4  Mary 20  Female 


TABLE_2 

Unique_ID Subject  Grade 
    1  Math   88 
    1  English  78 
    1  History  98 
    2  Math   65 
    2  English  72 
    2  History  84 
+0

Вы говорите о базах данных, но ваш пример выглядит как несколько таблиц в базе данных. Вы имеете в виду базы данных или таблицы? Является ли возможность просмотра вашей проблемы? – knut

+0

Да, столы, вы правы. Я отредактировал вопрос, чтобы отразить это изменение. – richiepop2

+0

С вашего вопроса, я понимаю, вы новичок в Ruby on Rails? Или у вас уже есть модели и миграции, написанные для этого приложения? Если да, можете ли вы опубликовать модель, относящуюся к вашему вопросу? Или вы ищете помощь в написании такой модели и соответствующих областей? – rdnewman

ответ

0

Вы можете определить представление для создания большой таблицы.

Пример кода (я использую Sequel и SQLITE в моем примере Но AR будет предлагает аналогичные функции.):

#Prepare example 
require 'sequel' 
DB = Sequel.sqlite() 
Sequel.extension :pretty_table 

DB.create_table(:tab1){ 
    Fixnum :Unique_ID 
    String :Name  
    Fixnum :Age  
    String :Sex 
} 
DB[:tab1].insert(1, 'Tim', 16, 'Male') 
DB[:tab1].insert(2, 'Chris', 15, 'Male') 
DB[:tab1].insert(3, 'Brad', 18, 'Male') 
DB[:tab1].insert(4, 'Mary', 20, 'Female') 

DB.create_table(:tab2){ 
    Fixnum :Unique_ID 
    String :Subject 
    Fixnum :Grade 
} 

DB[:tab2].insert(1, 'Math', 88) 
DB[:tab2].insert(1, 'English', 78) 
DB[:tab2].insert(1, 'History', 98) 
DB[:tab2].insert(2, 'Math', 65) 
DB[:tab2].insert(2, 'English', 72) 
DB[:tab2].insert(2, 'History', 84) 


#Show how you could use a view to select on two tables 
Sequel::PrettyTable.print(
    DB[:tab1].inner_join(:tab2, :Unique_ID => :Unique_ID).filter(:Name => 'Tim', :Subject => 'Math') 
) 

Результат:

+---+-----+----+----+-------+---------+ 
|Age|Grade|Name|Sex |Subject|Unique_ID| 
+---+-----+----+----+-------+---------+ 
| 16| 88|Tim |Male|Math |  1| 
+---+-----+----+----+-------+---------+ 

Одной из проблем является большое количество таблиц. Поэтому я бы не рекомендовал создавать одно большое представление со всеми данными и не создавать много видов. Вы можете определить соединение с данными, которые вам нужны для вашего выбора.

Смежные вопросы