次のコードを使用して、タグ付けされたすべての写真を選択しています
select pid from photo_tag where subject = me()
しかし今、特定のアルバムから写真だけを選択したいのですが、これを行うには 2 つの方法があります。
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 )
私が知る限り、どちらも同じことをしており、問題なく動作しています。
問題は、2 枚目、3 枚目などのアルバムではうまく機能しないことです。
私が次のことをしたら
select pid from photo_tag where subject = me() and pid in ( select pid from photo where aid = $aid1 or aid = $aid2)
または を置き換えると、両方ではなくいずれかのアルバムから写真のみが選択され、最初のアルバムからタグ付けされた写真と 2 番目のアルバムからすべての写真が選択されます。
したがって、クエリは最終的に次のようなものになります
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 分前にクエリの実行を開始し、まだロードしているため、クエリは十分に効率的ではないと思います。何かを返すことはありません。
すべてのアルバムをまとめてクエリするよりも、各アルバムを個別にクエリしたほうが速くなりますか?
他に何が良いでしょうか。
ここで何か助けていただければ幸いです。
ありがとう