2016-12-25 69 views
-4

我需要搜索销售的前10个项目,我一直在调查,我发现了一种叫做top的方法,可以使这成为可能,我尝试应用它,但我得到这个错误:寻找十大畅销产品

SyntaxError (/home/luis/sites/AdvanceControld/app/models/detalleve.rb:38: syntax error, unexpected '(', expecting keyword_end 
    query = select top 10('detallevet.Article') 

什么是最好的方法来做这个搜索?

def self.best_seller(params) 
    query = select top 10('detallevet.Article') 
      .joins('left outer join venta ON venta.Documento=detallevet.Docto and venta.RutaId=detallevet.RutaId') 
      .where("(venta.RutaId = :rutaId or :rutaId = '') AND (venta.IdEmpresa = :idempresa)",{rutaId: params[:search], idempresa: params[:search0]}) 
    query = query.where('venta.Fecha >= ? AND venta.Fecha <= ?', (params[:search1].to_date).strftime('%Y-%m-%d'), (params[:search2].to_date).strftime('%Y-%m-%d')) if params[:search1].present? and params[:search2].present? 
    query 
     end 

那里获得销售数据详细说明(详细)表和该表有该产品在第column.I我就与文塔(销售),因为这个我得到这样的最新数据。一文塔可以有很多detallevet和detallevet属于销售

这是detallevet模式:

create_table "DetalleVet", primary_key: "ID", force: :cascade do |t| 
    t.varchar "Article", limit: 50 
    t.integer "Docto",  limit: 4 
    t.money "Importe",      precision: 19, scale: 4 
    t.integer "RutaId",  limit: 4 
    t.varchar "IdEmpresa", limit: 50 
    end 

这是文塔架构

create_table "Venta", primary_key: "Id", force: :cascade do |t| 
    t.integer "RutaId",  limit: 4 
    .integer "Documento", limit: 4 
    t.datetime "Fecha" 
    t.varchar "IdEmpresa", limit: 50 
    end 
+5

我尽力帮你,开始写一些代码,但不知道你用你的名字列在语言这个问题是很难理解和恕我直言,几乎是不可能的回答。你能否为'venta'和'detallevet'数据库表发布你的数据库模式,显示你如何定义那些模型中的关联并将翻译添加到表和列名中? – spickermann

+0

@spickermann谢谢你的回答。更新 :) – LuisC

回答

1

我已经通过执行以下操作实现的解决方案查询,包括产品和相同的销售数量。我希望这将有助于别人

def self.bestseller 
     joins("INNER JOIN detallevet ON productos.Clave = detallevet.Articulo") 
      .select("detallevet.Articulo, COUNT(Articulo) as count, productos.Producto") 
       .group("detallevet.Articulo, productos.Producto").order("count DESC").limit(10) 
    end 
相关问题