我想用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
依旧......
任何帮助表示赞赏!
答案 0 :(得分: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_2
和User_3
答案 1 :(得分: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是前一个日期,依此类推......
请参阅小提琴here。
答案 2 :(得分:1)
请查看strtotime
找到here。有了它,您可以将时间戳转换为整数并进行比较。另外一个更好的方法就是按ID排序表并限制一个。
答案 3 :(得分:1)
您必须在SQL查询中使用GROUP BY
SELECT DISTINCT User, MAX(Date_inserted) FROM yourTable GROUP BY User