我必须根据一个非唯一的选择器返回多个记录。 要从中选择的表是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,因为它不是最后编辑的。
答案 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分组,因此,它将返回每页最后更改的对象。