2

我想用 php 在 mysql 中进行查询,并从数据库中的每个用户那里获取最后插入的行。让我给你举个例子。

假设我们有一个有 10 行的表

ID    Message   User     Date inserted

1      lala1    chris     13/02/2010 12:13
2      lala2    john      14/02/2010 12:14
3      lala3   george    15/03/2009 12:00
4      lala4    jack      01/04/2013 11:09
5      lala5    ina       12/08/2012 15:00
6      lala6    chris     13/03/2010 12:13
7      lala7    john      14/01/2010 12:04
8      lala8   george    15/02/2009 12:00
9      lala9    jack      01/03/2013 11:09
10     lala10    ina       12/05/2012 15:00

我想进行查询以获取按日期排序的 chris、john 和ina 最后插入的行。所以结果应该是这样的:

5      lala5    ina       12/08/2012 15:00
6      lala6    chris     13/03/2010 12:13
2      lala2    john      14/02/2010 12:14

然后在我从这些用户那里获得最后插入的行之后,我想进行另一个查询以再次为这些用户获取上一个最后插入的行,因此结果应该是:

10     lala10    ina       12/05/2012 15:00
1      lala1    chris     13/02/2010 12:13
7      lala7    john      14/01/2010 12:04

等等...

任何帮助表示赞赏!

4

4 回答 4

2

对于第一部分:(将为您提供所有用户的所有最后插入记录。您可以应用过滤器以仅获取 3 个用户)

SELECT t1.*
FROM Users t1
INNER JOIN (
    SELECT User, MAX(Date_Inserted) as MaxDate
    FROM Users
    GROUP BY User
) t2 ON t1.User = t2.User AND t1.Date_Inserted = t2.MaxDate

你也可以尝试更换

GROUP By User

WHERE User IN (User_1, User_2, User_3)

用这 3 个用户名替换User_1,User_2User_3

于 2013-05-03T22:07:11.613 回答
2

如果你需要得到最后一个,然后是前一个最后一个,等等,你需要使用一个排名函数:

SELECT *
FROM (
  SELECT
    Users.*,
    CASE WHEN @lst=User THEN @row:=@row+1 ELSE @row:=0 END row,
    @lst:=User
  FROM
    Users
  WHERE
    User IN ('ina','chris','john')
  ORDER BY
    User, Date_ins DESC
) s
WHERE
  row=0

row=0 将获得最后一个日期, row=1 将获得前一个日期,依此类推...

在此处查看小提琴。

于 2013-05-03T22:12:51.797 回答
1

请看一下strtotime找到here。有了它,您可以将时间戳转换为整数并进行比较。还有一种更好的方法是按 ID 对表格进行排序并限制一个。

于 2013-05-03T22:03:02.180 回答
1

您必须在 SQL 查询中使用 GROUP BY

SELECT DISTINCT User, MAX(Date_inserted) FROM yourTable GROUP BY User
于 2013-05-03T22:05:47.097 回答