2

ローカル、Skype、および電話 (ブール値、「t」または「f」) と性別 (文字列、「男性」または「女性」) の列を持つユーザー モデルがあります。各ユーザーは、skill_id と方向 (文字列、「教える」または「学ぶ」のいずれか) を持つ関連付けられた SkillMap モデルで多くのスキルを持つことができます。

私は、MetaWhere、Squeel、RanSack をいじり回して、これらのユーザーを可能な限り適切に、最も読みやすく、最もレールに似た方法で検索できるものを見つけようとしています。誰かが私に最も適切な宝石を教えてくれますか?それを構築する方法についてのヒントを教えてください。

現在、検索が実行されるたびに、以下のようなオブジェクトが検索テーブルに作成されます (書式設定が不十分で申し訳ありません。これらのダッシュなしで配列を保存する方法がわかりません)。

id|user_id|skype|local|phone|teach_skill_ids|learn_skill_ids|gender
37|628|t|t|f|---- '795'|---- '789'- '771'- '827'|Male

したがって、この場合、skype または local フラグが true (phone = 'f' を無視) であり、性別フラグが「Male」であり、かつ、関連する skill_map が direction = 'Teach' および skill_id= であるユーザーを見つけたいと考えています。 795、かつ、direction = 'Learn' で skill_id が IN である skill_map を持っている (789,771,827)

それがより明確になるなら、私はSQLを書くことに挑戦することができますが、ひどいサブクエリを使用してそれを行う方法しか知りません(DBAはこの部分をスキップしたいかもしれません)

SELECT * FROM users 
WHERE gender = 'Male'
AND (local = 't' OR skype = 't')
AND id IN 
    (SELECT user_id FROM skill_maps
     WHERE direction = 'Teach' 
     AND id = 795)
AND id IN
    (SELECT user_id from skill_maps
     WHERE direction = 'Learn'
     AND id IN (789,771,827))

これらのフィールドのいずれかが空白または false の場合、それらを検索条件として含めたくありません。

とにかく、それは私の質問です。ご覧いただきありがとうございます。

乾杯、ヨナ

4

1 に答える 1

0

sphinxelasticsearchを考えるような検索エンジンを使用する必要があると思います。Thinking Sphinx は使いやすく、セットアップも簡単です。

于 2012-03-26T05:40:03.577 に答える