我有以下查询,我需要转换为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`
内部选择是确保只选择current_user的终端,然后我只需要终端串口。我需要此查询来概述所有用户的终端,并显示终端提供的日志数以及上次发生日志的时间。查询适用于我的测试数据,只有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]])
答案 0 :(得分:1)
我没有声称对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
这会取出一个子查询,这有助于您的表现。