使用 Rails AREL 的复杂订单语句:SQL Case 语句

发布于 2024-12-10 08:28:03 字数 374 浏览 0 评论 0原文

我有这段代码,基本上尝试在活动关系顺序方法中使用 SQL case 语句:

relation = Foo.order("CASE WHEN foos.thing IS NOT NULL THEN 0 ELSE 1 END ASC")

在生成(和执行)的 SQL 中,它显示为:

(ORDER BY CASE ASC)

我尝试深入挖掘源代码并丢失在 Visitor.access 调用中线程向下。这是一个已知问题吗?是用户错误吗?我必须做一些神奇的事情才能让它发生吗?我的印象是它只是插入了原始 SQL。我们还对关系执行其他操作,例如选择、限制、偏移、分组、拥有和连接。

帮助! :)

I've got this bit of code that basically tries to use a SQL case statement in the active relation order method:

relation = Foo.order("CASE WHEN foos.thing IS NOT NULL THEN 0 ELSE 1 END ASC")

and in the generated (and executed) SQL it comes up as:

(ORDER BY CASE ASC)

I've tried digging down into the source and lose the thread down in the visitor.access call. Is this a known issue? Is it user error? Is there some magical thing I have to do to make it happen? I was under the impression that it just inserted the raw SQL. There are other things we're doing with the relation, such as select, limit, offset, group, having and joins.

help! :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神回复 2024-12-17 08:28:03

我也遇到过这个问题:

您可以将 CASE 放入 SELECT 中并命名它,以便您可以在 ORDER BY 中使用它。

relation = Foo.select("*, CASE WHEN foos.thing IS NOT 
  NULL THEN 0 ELSE 1 END AS foo_order").order("foo_order ASC")

I've had this problem too:

You can put the CASE into the SELECT and name it so you can use it in the ORDER BY.

relation = Foo.select("*, CASE WHEN foos.thing IS NOT 
  NULL THEN 0 ELSE 1 END AS foo_order").order("foo_order ASC")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文