【发布时间】:2014-05-20 22:01:02
【问题描述】:
我有一张这样的桌子:
create table images (
image_id serial primary key,
user_id int references users(user_id),
date_created timestamp with time zone
);
然后我有一个标签表,用于显示图像可以具有的标签:
create table images_tags (
images_tag_id serial primary key,
image_id int references images(image_id),
tag_id int references tags(tag_id)
);
为了得到我想要的结果,我运行如下查询:
select image_id,user_id,tag_id from images left join images_tags using(image_id)
where (?=-1 or user_id=?)
and (?=-1 or tag_id in (?, ?, ?, ?)) --have up to 4 tag_ids to search for
order by date_created desc limit 100;
问题是,我想根据唯一 image_ids 的数量进行限制,因为我的输出将如下所示:
{"images":[
{"image_id":1, "tag_ids":[1, 2, 3]},
....
]}
请注意我如何将 tag_ids 分组到一个数组中以进行输出,即使 SQL 为每个 tag_id 和 image_id 组合返回一行。
所以,当我说 limit 100 时,我希望它适用于 100 个唯一的 image_ids。
【问题讨论】:
标签: java sql postgresql left-join sql-limit