Naj*_*aji 0 ruby mysql sql ruby-on-rails
有没有一种方法可以从 MYSQL 数据库中的每一列获取 Distinct 值,而不必SELECT DISTINCT为每一列执行多个语句?
现在在我的 Rails 控制器中我用来.pluck()运行:
@first = User.distinct.pluck(:first_name)
@last = User.distinct.pluck(:last_name)
@city = User.distinct.pluck(:city)
@state = User.distinct.pluck(:state)
@age = User.distinct.pluck(:age)
@info = {
'first' => @first,
'last' => @last,
'city' => @city,
'state' => @state,
'age' => @age
}
respond_with @info
Run Code Online (Sandbox Code Playgroud)
它创建了一个对象,其中包含我的两个唯一数组,但需要大约 7.7 秒(我的表有 320 万行完全填充的行)并运行两个单独的 SQL 查询。
我尝试了这种方法,但这给了我每个独特组合的数组:
@info = User.distinct.select(:first_name, :last_name, :city, :state, :age)
respond_with @info
Run Code Online (Sandbox Code Playgroud)
不确定你希望如何输出最终数据,但如果你想避免多个 SQL 语句,你可以这样做:
SELECT
ARRAY(SELECT DISTINCT(col1) FROM MyTable) AS col1_values,
ARRAY(SELECT DISTINCT(col2) FROM MyTable) AS col2_values
Run Code Online (Sandbox Code Playgroud)
这将为您提供一行,其中包含您指定的每个“colX”的所有不同值。只需添加您想要包含的任何其他列即可。每列中的 DISTINCT 值将以数组形式返回。
性能仍然很差,因为我认为你无法避免执行多个不同的 DISTINCT 操作。
如果这就是您要找的,请告诉我。