0

我正在使用以下代码来选择我标记的所有照片

select pid from photo_tag where subject = me()

但现在我只想选择某个相册中的照片,有两种方法可以做到这一点。

select pid from photo where aid = $aid1 and pid in ( select pid from photo_tag where subject = me() )

或者

select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 )

据我所知,他们都做同样的事情,而且工作正常。

问题是它不适用于第二张、第三张等专辑。

如果我执行以下操作

select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 or aid = $aid2)

它只会从其中一个相册中选择照片,而不是两者都选择,如果我替换 or ,它将选择我从第一个相册中标记的照片和第二个相册中的所有照片。

所以查询最终会变成类似

 SELECT pid from photo where ( pid in (select pid from photo where aid = $aid1 and pid in (select pid from photo_tag where subject = me() ) ) or pid in (select pid from photo where aid = $aid2 and pid in (select pid from photo_tag where subject = me() ) ) )

当我进行查询以获取我标记的所有照片时,大约需要 900 毫秒,据我所知返回几百张照片。我试图将其限制为大约 6 或 7 个相册,即大约 150 张照片,但我认为查询效率不够高,因为我在大约 15 分钟前开始运行查询并且它仍在加载,所以我不认为它永远会返回任何东西。

如果我单独查询每张专辑而不是所有专辑一起查询会更快吗?

还有什么可以更好的。

我很感激这里的任何帮助。

谢谢

4

1 回答 1

0

开始研究多查询和批处理,这应该会提高您的性能。

因此,您的最后一个查询将是由专辑分隔的批量数组调用,并且每个调用将是photophoto_tag表之间的多重查询。

https://developers.facebook.com/docs/reference/api/batch/

于 2013-06-17T12:50:26.550 回答