我有 2 张桌子:
user messages
+---------+ +----------------+
|id|credit| |id|user_id| ... |
+---------+ +----------------+
|01| 05 | |01| 01 | ... |
|02| 01 | |02| 01 | ... |
|03| 00 | |03| 01 | ... |
+---------+ |04| 02 | ... |
|05| 02 | ... |
|06| 03 | ... |
+----------------+
我需要从n=user.credit的消息中选择n条消息。我想执行如下查询的查询:
SELECT *
FROM user u JOIN messages m ON u.id = m.user_id LIMIT u.credit
WHERE user in ...;
并且应该返回第 01、02、03、04 行,而不是 05、06 行。
我知道我不能写LIMIT u.credit
但想要这种行为,根据他们拥有的信用值限制为每个用户获取的消息数量(用户 01 的限制为 5,用户 02 的限制为 1 等等)和我想一次获取所有消息,以避免必须为每个用户执行 COUNT 和 SELECT 。
我将 MySQL 与 InnoDB 一起使用