2011-06-01 3 views
2

は、私は3つのテーブル&のモデルがあります: - 私は特定の日付範囲のすべてのbrand_data_recordsを望んレールに結合テーブルrailsとsqlここで、IS NOT NULLは結合で正しく機能しません。 2.3.5 RailsとRubyは1.8.7 - MySQLの5

ブランド brand_data_records と brand_data_records_brandsを指定された属性がdb内でヌルでない指定ブランド。

だから私はしている:

BrandDataRecord.find(:all, :select => column_match, :joins => :brands, :conditions => ["brand_data_records_brands.brand_id = ? and date_retrieved >= ? AND date_retrieved <= ? and ? IS NOT NULL",brand.id,start_date,end_date,column_match]) 

これは、このSQLを生成:

SELECT sentiment FROM `brand_data_records` INNER JOIN `brand_data_records_brands` ON `brand_data_records_brands`.brand_data_record_id = `brand_data_records`.id INNER JOIN `brands` ON `brands`.id = `brand_data_records_brands`.brand_id WHERE (brand_data_records_brands.brand_id = 330516084 and date_retrieved >= '2011-05-02' AND date_retrieved <= '2011-06-01' and 'sentiment' IS NOT NULL) 

一般的に動作しますが、それはNULL値を持っている余分なレコードの束をバック与えます。私はSQLと一緒にそれらを削除する場合、それがうまく動作しますが、レールで(またはその事実についてはSQLでさえ)修正する方法がわからない

答えて

1

あなたはおそらく、 :

`sentiment` IS NOT NULL 

何が誤ってやっていることは、文字列'sentiment'が、それはなることはありません、もちろんこれは、nullではないことを主張しています。あなたの条件に:sentimentまたは'sentiment'.to_sym'を渡すと、変換時に逆引用符でエスケープされたシンボルが表示されるので、これを修正する必要があります。

+0

IシンボルアプローチとMySQLを試みである:インナー 'brand_data_records_brands'.brand_data_record_id ='インナー 'brands'.id =' brand_data_records_brands' ON 'brands'をJOIN brand_data_records'.id ON' brand_data_records_brands'をJOIN brand_data_records' 'FROM感情を選択します.brand_id WHERE(brand_data_records_brands.brand_id = 330516084とdate_retrieved> = '2011-05-02' AND date_retrieved <= '2011-06-01'および '---:感情\ n'はNULLではない)と同じ問題があります。私はsql文字列の感情をハードコーディングしようとしています、それは正常に問題の正しい軌道にあるので、うまく動作します... – Joelio

+0

感情をシンボルにして、これを行います:matching_records = BrandDataRecord.find(:all、:select = > brand_id、start_date、end_date]> column_match、:joins =>:ブランド、条件=> ["brand_data_records_brands.brand_id =?とdate_retrieved> =?AND date_retrieved <=と#{column_match}はNULLではありません" それが動作します。これは醜いようですが、少なくとも動作します! – Joelio

+0

ええ、私は "文字列は決してNULLではありません"という意味です。 – tadman

関連する問題