选择具有多个选择器的多个记录,但也限制1?

时间:2016-04-26 08:11:54

标签: mysql

我必须根据一个非唯一的选择器返回多个记录。 要从中选择的表是page_objects,每页有多个对象(父表)。

我有一个包含多个page_id的数组,我想返回每个page_id的最后编辑的page_object。

没有SELECT IN的查询:

SELECT `object` FROM `page_objects` WHERE `f_page_id` = $iPage_id ORDER BY last_change DESC LIMIT 1;

我想得到这样的东西:

SELECT `object` 
FROM `page_objects`
WHERE `f_page_id` IN ($iPage_id1,$iPage_id2,...) ORDER BY last_change DESC  LIMIT 1;

我可以为此创建一个查询吗?

修改

我注意到我的问题并不是很清楚。 我想为每个给定的page_id返回一个page_object。 例如:

SELECT `f_page_id`, `page_object_id`, `object` 
FROM `page_objects`
WHERE `f_page_id` IN (1,2,3) ORDER BY last_change DESC  LIMIT 1;

应该返回:

page_id    page_object_id    object
1          1                 ...
2          7                 ...
3          45                ...

与给定的page_ids匹配的其他page_object应仅限于一个! 因此,不应返回page_object_id 2,它也是id为1的页面的page_object,因为它不是最后编辑的。

1 个答案:

答案 0 :(得分:1)

您应该可以GROUP BY您的查询:

SELECT `f_page_id`, `page_object_id`, `object` 
FROM `page_objects`
WHERE `f_page_id` IN (1,2,3) 
GROUP BY f_page_id
ORDER BY last_change DESC;

这样,所有对象首先按上次更改排序,然后按页面ID分组,因此,它将返回每页最后更改的对象。