gpt4 book ai didi

mysql - 不同自定义 View 的记录计数

转载 作者:可可西里 更新时间:2023-11-01 11:23:00 25 4
gpt4 key购买 nike

我正在尝试解决获取 ListView 的不同自定义 View 的记录数的问题。自定义 View 是一个用户定义的 View ,其中将添加一些条件。

示例:

  All Records View(3): {criteria : none}
Name |email |age
John |john@foo.com| 23
Ann |ann@foo.com | 20
Jack |jack@foo.com| 13


Kids View(1): {criteria : age<15}
Name |email |age
Jack |jack@foo.com| 13

Foo Kids View(1): {criteria : age<15 and email contains('foo.com')}
Name |email |age
Jack |jack@foo.com| 13

如上例所示,根据标准,必须为每个 View 计算 View 计数。每个 View 的计数甚至在用户选择特定 View 之前就已显示。有多个用户查看记录/添加/更新/删除记录。每次运行 mysql 查询以显示每个 View 的计数可能非常密集且耗时,因为可能有数百万行。我考虑过使用 memcached 或 redis 来存储 View 的初始记录计数和稍后在发生更改时更新它们。这里的问题是如何在运行时动态地找出哪些请求针对哪个 View 。

示例:如果从任何 View 中删除“Jacks”记录,则必须在所有 View 中减去计数,类似地,如果他的年龄更新为 20,则必须从 child 的 View 和 foo child 的 View 中减去计数。

欢迎就如何解决问题提出任何建议。

最佳答案

选项 1:缓存。缓存记录在某处计数(memcached、redis)并定期运行 cron 作业以刷新计数器。如果您不太在意计数器是否稍微不准确,请使用此方法。

选项 2:在您的代码中存储路由逻辑。您的语言可能会使它变得容易,也可能不会。这就是它在 Ruby 中的样子:

class ViewMatcher
def initialize
@views = {'all' => lambda{|params| true },

'kids' => lambda{|params| params[:age] && params[:age] < 15 },

'foo kids' => lambda{|params| params[:age] &&
params[:age] < 15 &&
params[:email] &&
params[:email].include?('foo')}}
end

def print_matching_views(params)
puts "Matching views for query: #{params.inspect}"
result = []
@views.each do |k, v|
result << k if v.call(params)
end
puts result
puts ""
end
end


vm = ViewMatcher.new

vm.print_matching_views :age => 10
vm.print_matching_views :age => 20
vm.print_matching_views :age => 10, :email => 'foo@example.com'
vm.print_matching_views :age => 10, :email => 'moo@example.com'

输出:

Matching views for query: {:age=>10}
all
kids

Matching views for query: {:age=>20}
all

Matching views for query: {:age=>10, :email=>"foo@example.com"}
all
kids
foo kids

Matching views for query: {:age=>10, :email=>"moo@example.com"}
all
kids

关于mysql - 不同自定义 View 的记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8741751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com