开发者

How to get data from two different fields in sample table whether anyone of the field is NULL ?

I am using ruby 1.8.6 , rails 2.3.8.

Here , I have a problem with multiple combo box in Rails,

  1. Product drop down list
  2. Sku's drop down list ( depends on production selection )

Product tables fields are

   id name

In Sku's tables fields are

 id   name product_id alias_id

Alias tables fields are

 id name

For example I have Sku's tables data like below

  id name  product_id alias_id
  1. 100-m     1       10
  2. 10-ml     1        NULL
  3. 150       1        2
  4. 200-m     1        10
  5. 300-m     1        10

in Controller I written query like,

     @skus = Sku.all(:conditions => ["product_id = ? ", 
     params[:id]],:select=>"skus.id, 
     CASE when skus.alias_id IS NOT NULL then (SELECT alias.name FROM alias WHERE
     alias.id = skus.alias_id group by alias.name) END AS 'skus_name'",
     :order=>"skus_name" ,:include=>[:alias])

This query written output like,

     id 开发者_开发技巧skus_name
      1. 100gms
      2. 10-ml
      3. 150-ml
      4. 100gms
      5. 100gms

Can any one help me how to get the distinct results?

Thanks in advance


You can either call uniq on the @sku variable that is returned.

@skus = Sku.all(:conditions => ["product_id = ? ", 
   params[:id]],:select=>"skus.id, 
   CASE when skus.alias_id IS NOT NULL then (SELECT alias.name FROM alias WHERE
   alias.id = skus.alias_id group by alias.name) END AS 'skus_name'",
   :order=>"skus_name" ,:include=>[:alias]).uniq

This will perform the same DB select but get unique results in ruby.

The alternative is to use DISTINCT in the select

@skus = Sku.all(:conditions => ["product_id = ? ", 
   params[:id]],:select=>"skus.id, 
   CASE when skus.alias_id IS NOT NULL then (SELECT DISTINCT alias.name FROM alias WHERE
   alias.id = skus.alias_id group by alias.name) END AS 'skus_name'",
   :order=>"skus_name" ,:include=>[:alias])

This will only get unique results in the database.

I'd go with the second option as it should be quicker than doing uniq in ruby :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜