gpt4 book ai didi

mysql - 如何在 Rails 中执行复杂查询

转载 作者:行者123 更新时间:2023-11-29 14:28:21 25 4
gpt4 key购买 nike

我有以下查询,需要将其转换为类似 Rails 的语法。有什么办法可以做到这一点,还是直接使用普通的 MYSQL 更好?

SELECT `terminals`.`serial`, Count(*) AS count, MAX(`logs`.`created_at`) AS created_at 
FROM
(SELECT * FROM `terminals` WHERE `terminals`.`user_id`= 1) AS terminals
INNER JOIN `bap-backend`.`logs` ON terminals.`serial`=`logs`.`serial`
GROUP BY `serial` ORDER BY `logs`.`created_at`

内部选择是为了确保只选择当前用户的终端,那么我只需要终端串行。我需要此查询来概述所有用户的终端,并显示终端提供了多少日志以及最后一次日志发生的时间。该查询适用于我的测试数据,只是 Rails 中的实现对我来说有点复杂。

谢谢!

编辑

对于google人来说,只需使用find_by_sql,你仍然可以在其中添加变量。只需在命令前添加一个类,如下例:

@items_event = Item.find_by_sql(["SELECT items.*, ei_relationships.itemprice, ei_relationships.currency, ei_relationships.itemunit
FROM `ei_relationships` INNER JOIN `items` ON `items`.`id` = `ei_relationships`.`item_id`
WHERE `ei_relationships`.`event_id` = ?", @event[:id]])

最佳答案

我并不声称了解有关 Rails 的任何信息,因此我无法回答问题的这一部分。但如果您坚持使用普通 MySQL,您的查询可能会被清理一些:

SELECT
terminals.serial,
COUNT(*) AS count,
MAX(logs.created_at) AS created_at
FROM
terminals
INNER JOIN `bap-backend`.logs
ON terminals.serial = logs.serial AND terminals.user_id = 1 /* instead of performing a subquery, just add this to your join conditions */
GROUP BY
serial
ORDER BY
logs.created_at

这会取出一个子查询,这应该有助于提高性能。

关于mysql - 如何在 Rails 中执行复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505003/

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