group_concat() と内部結合の制限について話している他のスレッドを詳しく調べましたが、答えが見つからなかったので、先に進んで質問します。
既存のフォト コミュニティ サイトを開発しています。特定の日 (今日) が誕生日のメンバーを取得し、各メンバーの最も評価の高い 5 枚の写真を取得したいと考えています。しかし、「最もお気に入りの」誕生日メンバー (つまり、お気に入りの数が最も多い) 10 人だけが必要です。ここに私が持っているものがあります:
SELECT users.user_id, users.user_name,
GROUP_CONCAT(CONVERT(photos.photo_id,char(32))
ORDER BY photos.average_rate) as photo_ids
FROM users
INNER JOIN photos ON photos.user_id=users.user_id
WHERE users.day_of_birth = DATE_FORMAT('2012-04-17', '%m-%d')
AND users.photo_count>0
GROUP BY users.user_id
ORDER BY users.favorite_count DESC, users.photo_count DESC LIMIT 0,10
sの量を 5 に制限できないことを除いて、これは私が望むことをphoto_id
行います。出力は JSON としてアプリに送信され、一部のメンバーはすでに 20,000 枚以上の写真をアップロードしているため、許容できないほど長くなります。出力文字列。私にとってうまくいくと思われる唯一の「解決策」は、サーバー変数group_concat_max_len
を少なくとも5つのIDを保持する適切なものに設定することですが、これは非常にハックで信頼性がありません. photo_id
単一のクエリでユーザーごとに正確に 5 秒を返す方法はありますか? または、PHP でループを実行する必要がありますか?
コンマ区切り値の photo_ids は必ずしも必要ではありません。group_concat() アプローチを完全に捨てて、それがより実現可能であれば内部結合を行うこともできます。しかし、それでも結果を 5 に制限する方法を知りません。