我已经广泛阅读了其他关于 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
这可以满足我的要求,除了我不能将photo_id
s 的数量限制为 5输出字符串。似乎对我有用的唯一“解决方案”是将服务器变量设置group_concat_max_len
为合理的值,至少可以容纳 5 个 id,但这非常笨拙且不可靠。有没有办法photo_id
通过单个查询为每个用户准确返回 5 秒?或者我需要在我的 PHP 中做一个循环吗?
我不一定需要逗号分隔值中的 photo_ids,如果更可行,我也可以完全放弃 group_concat() 方法并进行内部连接。但即使在那里,我也不知道将结果限制为 5 的方法。