sql子查询,传递变量

sql子查询,传递变量,sql,activerecord,subquery,Sql,Activerecord,Subquery,您能像这样将变量传递到子查询中吗 SELECT users.id AS id, (SELECT SUM(total) FROM (image_totals) WHERE `cat_id` IN ('5', '3') AND `user_id` =id) AS image_count 这只是一个较大查询的一部分,所有查询都是通过活动记录生成的,但关键问题仍然是“id”变量,如何将其传递到子查询中?我看错了吗 提前谢谢。如果您需要更多信息,请告诉我。不,这是不可能的,必须以不同的方式实施 Sel

您能像这样将变量传递到子查询中吗

SELECT users.id AS id, 
(SELECT SUM(total) FROM (image_totals) WHERE `cat_id` IN ('5', '3') AND `user_id` =id) AS image_count
这只是一个较大查询的一部分,所有查询都是通过活动记录生成的,但关键问题仍然是“id”变量,如何将其传递到子查询中?我看错了吗


提前谢谢。如果您需要更多信息,请告诉我。

不,这是不可能的,必须以不同的方式实施

Select必须从一个一致的数据集中进行选择

您的数据集可能包含复杂的查询。

使用分组依据。您需要每个user.id的SUM(total)作为cat_id的特定值。我不知道您的查询的其余部分是什么样子,但对于显示的内容,您可以:

SELECT
        users.id AS id,
        SUM(total)
FROM image_totals
WHERE cat_id IN ('5', '3')
GROUP BY users.id

如果我正确理解了你的问题,那么是的,你可以

如果表中不包含相同的列,则不需要每个列的表名。我更喜欢包含表名,因为它更容易理解

SELECT  users.id AS id ,
        (SELECT SUM(image_totals.total)
         FROM   image_totals
         WHERE  image_totals.cat_id IN ( '5', '3' ) AND 
                image_totals.user_id = users.id) AS image_count
FROM users
您还可以对表使用alias,以使其更易于键入。u=用户,i=图像\总计

SELECT  u.id AS id ,
        (SELECT SUM(i.total)
         FROM   image_totals AS i
         WHERE  i.cat_id IN ( '5', '3' ) AND 
                i.user_id = u.id) AS image_count
FROM users AS u

谢谢你的回答。我也这么想。正确的方法是什么?加入?