Mysql 使用 IN 子句查询每个项目的限制
Mysql query with IN clause and limit for each item
我在 MySQL 中有一个 table 字段 "class_id"。我需要编写一个查询,其中 returns 前 15 行使用时间降序排序,对于带有 IN 子句的列表中的每个值。
查询解释:
select * from table_x where class_id IN (1,2,3) sort by time_x desc limit 15;
在上面的示例查询中,我需要获取每个 class_id(1,2 和 3)的前 15 行,这些行是根据时间降序排列的。
您需要MySQL user defined variables
的帮助
SELECT
*
FROM
(
SELECT
X.*,
IF(@sameClass = class_id, @rn := @rn + 1,
IF(@sameClass := class_id, @rn := 1, @rn := 1)
) AS rank
FROM table_x AS X
CROSS JOIN (SELECT @sameClass := 0, @rn := 1 ) AS var
WHERE class_id IN (1, 2, 3)
ORDER BY class_id, time_x DESC
) AS t
WHERE t.rank <= 15
ORDER BY t.class_id, t.rank
在您的情况下 LIMIT 15
实际上将结果集限制为最多包含 15 条记录,这不是您想要的。
我在 MySQL 中有一个 table 字段 "class_id"。我需要编写一个查询,其中 returns 前 15 行使用时间降序排序,对于带有 IN 子句的列表中的每个值。
查询解释:
select * from table_x where class_id IN (1,2,3) sort by time_x desc limit 15;
在上面的示例查询中,我需要获取每个 class_id(1,2 和 3)的前 15 行,这些行是根据时间降序排列的。
您需要MySQL user defined variables
SELECT
*
FROM
(
SELECT
X.*,
IF(@sameClass = class_id, @rn := @rn + 1,
IF(@sameClass := class_id, @rn := 1, @rn := 1)
) AS rank
FROM table_x AS X
CROSS JOIN (SELECT @sameClass := 0, @rn := 1 ) AS var
WHERE class_id IN (1, 2, 3)
ORDER BY class_id, time_x DESC
) AS t
WHERE t.rank <= 15
ORDER BY t.class_id, t.rank
在您的情况下 LIMIT 15
实际上将结果集限制为最多包含 15 条记录,这不是您想要的。