2016-12-25 66 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 
相關問題