这是背景,我有一个表 object
包含:
- 编号
- 用户(来自用户表的 id)
- 日期(日期)
- 状态 (0|1)
还有另一个表 user
包含:
- 编号
- 状态 (0|1)
例如:
Object
ID | USER | DATE | STATE
1 1 2012-10-01 1
2 2 2012-08-01 1
3 3 2012-10-01 1
4 3 2012-10-02 1
5 3 2012-09-01 1
6 3 2012-10-01 1
7 1 2012-10-02 1
8 2 2012-10-02 0
9 2 2012-10-02 1
10 1 2012-10-01 1
11 2 2012-10-01 1
12 3 2012-10-01 0
13 4 2012-11-11 1
Users
ID | STATE
1 | 1
2 | 1
3 | 1
4 | 0
我会请求为每个有效状态用户循环显示一个对象,如果对象状态是事件的,则按日期降序排列。
前任。结果:
ID | USER | DATE | STATE
10 1 2012-11-01 1
9 2 2012-10-02 1
4 3 2012-10-02 1
7 1 2012-10-02 1
11 2 2012-10-01 1
3 3 2012-10-01 1
1 1 2012-10-01 1
2 2 2012-08-01 1
6 3 2012-10-01 1
5 3 2012-09-01 1
我可以做简单的查询,但后来我承认不知道如何在这里做。
编辑 2012-11-22 : 让我们尝试另一种方法......通过这个查询(感谢 Michiel van Vaardegem),我有一个用户列表,以便我想要......顶部有新鲜度对象的那个。
SELECT o.user
FROM object o
INNER JOIN users ON user.id = o.user
WHERE o.state=1 AND users.state=1
GROUP BY o.user
ORDER BY o.date DESC
结果是:
USER
1
2
3
新问题方法:
有了这个 ID 列表、可能计算的行数和用户定义的变量,您认为可以做些什么吗?
例子:
- 假设这个列表,SELECT * FROM object WHERE user IN
($thislist) AND state=1 按日期排序
- 对于取决于用户的每个对象行(这里我不知道如何在 mysql 中解释)
使用用户位置(循环中)+ 用户计数增加排名变量
- ORDER BY rank LIMIT n,x 结果
我想在用户循环中对我的对象进行排名,例如:
object from user 1,2,3,1,2,3,1,3,3,1,1,1,1,1,1,1,1,etc... if exist
这个新方法算法是否可以在 mysql 查询中实现,如果可能的话如何......这是一个很好的问题?
谁能看到只在 MySQL 中的解决方案?
提前致谢
最佳答案
类似于:
SELECT o.id, o.user, o.date, 1 AS state
FROM object o
INNER JOIN user ON u.id = o.user
WHERE o.state = 1 AND u.state = 1
GROUP BY o.user, o.date
ORDER BY o.user, o.date DESC
我不确定,但如果我没看错的话,您只需要两个表中的状态均为“1”的记录,对吗? 您想先按用户排序,然后再按日期排序?
关于MySQL 为每个有效用户循环一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464899/