MySQL 为每个有效用户循环一行

标签 mysql group-by sql-order-by cycle

这是背景,我有一个表 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 列表、可能计算的行数和用户定义的变量,您认为可以做些什么吗?
例子:

  1. 假设这个列表,SELECT * FROM object WHERE user IN ($thislist) AND state=1 按日期排序
  2. 对于取决于用户的每个对象行(这里我不知道如何在 mysql 中解释) 使用用户位置(循环中)+ 用户计数增加排名变量
  3. 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/

相关文章:

mysql - 根据其他表的值对 MySQL 查询进行 ASC 或 DESC 排序

php - MySQL中基于多个因素获取特定数据的问题

来自 2 个表的带有计数的 SQL 查询

mysql - 为什么在 MySQL 中使用 '' 或 ""不能通过 ORDER BY 对列别名进行排序?

python - 使用 .order_by() 和 .latest() 的 Django 查询

MySQL:优化 GROUP BY 多个键

mysql - 在 MySQL 中使用十六进制数

python - Django/mysqlclient 寻找丢失的 `libmysqlclient.18.dylib` 文件

php - 只有一个文件数据进入数据库

MySQL - UNION SELECT 与 RLIKE 和 GROUP BY - 无法插入 INNER JOIN