gpt4 book ai didi

ruby-on-rails - 如何编写不区分大小写的查询并仅返回 Rails 中的唯一记录

转载 作者:行者123 更新时间:2023-11-29 14:36:32 24 4
gpt4 key购买 nike

我正在使用 Rails 4 和 PostgreSQL,并试图找出一种方法来编写不区分大小写的查询方法,该方法返回记录,这样您就只会得到一个不区分大小写的重复项。举个简单的例子,假设你有一个 Email表示已发送电子邮件的模型,具有 id , to , from ,您的数据如下所示:

id| to              | from
------------------------------------
1 | tester@test.com | sender@test.com
2 | TESTER@TEST.com | sender@test.com
3 | foo@test.com | sender@test.com

我希望查询方法只返回:

[<#Email:0x1234 id: 1, to: "tester@test.com", from: "sender@test.com">, <#Email:0x1224 id: 3, to: "foo@test.com", from: "sender@test.com">]

所以基本上我只想要其中一条记录,如果它在忽略大小写的情况下证明是匹配的。这是否可以在一行中完成并让数据库返回正确的记录,或者是否有另一种聪明的方法来做到这一点?由于某种原因,我遇到了瓶颈,非常感谢您的帮助!

最佳答案

您可以使用 Postgres 窗口函数来完成此操作。您需要查看 row_number() 函数。

以下是您实现预期结果的方法:

select id,fro,tos
FROM
(
select id,fro,
tos, row_number() over (partition by LOWER(tos) ORDER BY LOWER(tos) DESC) AS alpharow
from stacks
) flattened
where alpharow = 1

我不得不为“to”和“from”使用备用名称,因为它们是保留字 - 但它们在您的示例中映射的内容应该很明显。

一些后续阅读:

https://buildingvts.com/understanding-postgres-window-functions-697bc0ff2ed4

https://robots.thoughtbot.com/postgres-window-functions

关于ruby-on-rails - 如何编写不区分大小写的查询并仅返回 Rails 中的唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750720/

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