Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Rails - Kéo và tính toán hiệu quả dữ liệu qua một số mối quan hệ

Để nhận danh sách ID người dùng với nhiều lần mua hàng, bạn có thể thực hiện như sau, thao tác này sẽ chỉ truy cập vào một bảng:

user_ids = PurchasedDeal.count(:group => :user_id, :having => 'count_all > 0').keys

Sau đó, bạn có thể tìm nạp tất cả những người dùng này bằng:

users = User.find user_ids

Mọi thứ có thể được tăng tốc với bộ nhớ đệm bộ đếm. Trong mô hình người dùng của bạn, hãy thêm tùy chọn :counter_cache => true tới has_many liên kết cho các giao dịch đã mua. Bạn sẽ cần thêm một cột số nguyên trên bảng người dùng của mình và khởi tạo, cột này có thể trông như sau khi di chuyển:

add_column :users, :purchased_deals_count, :integer, :null => false, :default => 0
User.each { |u| User.reset_counters u, :purchased_deals }

Khi điều đó không xảy ra, nó sẽ trở nên đơn giản hơn rất nhiều:

users = User.all :conditions => 'purchased_deals_count > 0'

Rails sẽ luôn cập nhật cột cho bạn, với hầu hết các thao tác tiêu chuẩn.

Để có được tổng giá sẽ luôn liên quan đến việc tham gia. Hoặc bạn có thể xây dựng một băm giá thỏa thuận và thực hiện quá trình xử lý tẻ nhạt trong Ruby. Tôi không phải là chuyên gia SQL, nhưng bạn có thể loại bỏ tham gia bằng cách lưu trữ giá với PurchasedDeal. Nếu không, đây là cách thực hiện với tham gia:

user_id_to_price = PurchasedDeal.sum 'deal.price', :include => :deal, :group => :user_id

Bạn có thể lọc điều đó chỉ trên những người dùng bạn muốn bằng cách thêm một cái gì đó như :conditions => ['user_id IN (?)', users] . (Nơi users có thể là danh sách các ID, nhưng cũng có thể là các đối tượng Người dùng.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi MySQL Quá nhiều kết nối

  2. Sử dụng PHP và MySQL để thêm hình ảnh vào thư viện

  3. Làm cách nào để di chuyển cấu trúc cơ sở dữ liệu MySQL mới từ nhà phát triển sang trang web sản xuất bằng dòng lệnh?

  4. Đếm và hiển thị bao nhiêu kết quả cột cụ thể

  5. Kiểm tra kiểu biến PHP so với kiểu dữ liệu MYSQL