Php 如何选择MySQL中最新的行?

Php 如何选择MySQL中最新的行?,php,mysql,select,where,Php,Mysql,Select,Where,我想选择MySQL中有5项的特定表的最新行。 该表如下所示: id自动增加 到 从…起 时间戳 文本 数据类似于: |id | to | from | time stamp | text | 1 | user01 | user02 | 2011-09-01 | text1 | 2 | user01 | user02 | 2011-09-02 | text2 | 3 | user02 | user01 | 2011-09-02 | text3 | 4 | user01 | user03

我想选择MySQL中有5项的特定表的最新行。 该表如下所示:

id自动增加 到 从…起 时间戳 文本 数据类似于:

|id | to     | from   | time stamp | text
| 1 | user01 | user02 | 2011-09-01 | text1
| 2 | user01 | user02 | 2011-09-02 | text2
| 3 | user02 | user01 | 2011-09-02 | text3
| 4 | user01 | user03 | 2011-09-03 | text4
| 5 | user01 | user04 | 2011-09-03 | text5
| 6 | user01 | user03 | 2011-09-04 | text6
| 7 | user03 | user01 | 2011-09-05 | text7
我想选择*WHERE to='user01',最新的数据可能是通过id或时间戳。from可以是多个,但每个相同的from数据只能出现一次

无论如何,所选数据将为:

| 2 | user01 | user02 | 2011-09-02 | text2
| 5 | user01 | user04 | 2011-09-03 | text5
| 6 | user01 | user03 | 2011-09-04 | text6
能做到吗? 感谢您花时间阅读我的问题:

SELECT * FROM tablename WHERE to = 'user01' ORDER BY timestamp DESC LIMIT 1

…将为您提供最新的条目。

我想您正在寻找从表中选择不同的用户,其中user\u to='user1'按id DESC排序

SELECT * FROM `table_name` WHERE `to` = 'user01' ORDER BY `timestamp` DESC LIMIT 0,1

DISTINCT将仅为每个用户返回一行值。

一种可能是这样的:

SELECT * FROM tbl WHERE id IN (
    SELECT MAX(id) FROM tbl
    WHERE to = 'user01'
    GROUP BY from
);
但我不知道它是否符合您的要求,每个from只能出现一次

SELECT t.* 
FROM
      TableX AS t
  JOIN
      ( SELECT DISTINCT `from` AS f
        FROM TableX
        WHERE `to` = 'user01'
      ) AS df
    ON 
      t.id = ( SELECT tt.id
               FROM TableX AS tt
               WHERE tt.`to` = 'user01'
                 AND tt.`from` = df.f
               ORDER BY tt.`timestamp` DESC
               LIMIT 1
             )

最好避免使用关键字to、from和timestamp来命名表和字段。

如果希望从用户处获得每个唯一的最新行,请执行以下操作:


我认为获取id的最大值可能比时间戳的最大值要快

您可以这样做:

SELECT to, from, max(timestamp) FROM <table> WHERE to = 'user01' GROUP BY from
为了获得相关的文本,你也可以这样做,但这不是很有效

SELECT * FROM <table> 
WHERE 
    CONCAT([to], [from], [timestamp]) 
    IN 
    (
     SELECT CONCAT([to], [from], MAX([timestamp])) FROM <table> 
     WHERE [to] = 'user01' GROUP BY [from]
    )

我想,他想为每个to和from组合获取最新条目。是的,Alexander Sulfrian是对的,我尝试过这种方法,它只会获取单个最新数据,感谢回复您的代码是有效的,我有3个数据正好匹配与用户不同的3个数据,但由于某种原因,数据标签是空白的,我会继续尝试,感谢您的回复您可以尝试从中选择不同的用户作为自定义数据从表中选择标题。。。。。另外,正如需要注意的,您应该避免使用像from这样的字段名,因为它是一个关键字:谢谢回复,您的代码可以工作!谢谢!谢谢你的代码运行得很好,但是我无法获取文本数据,谢谢你的回复:如果两个顺序,即via id和via timestamp是相同的,那么这也应该可以工作。只需要在子查询中添加WHERE to='user01'选择MAXid FROM tbl WHERE to='user01'GROUP BY to,FROM。哦,我错过了WHERE。。。已编辑。您的代码工作正常,但我无法获取文本数据,感谢回复:这只提供单个数据,我想要的与to=user01的用户不同,但仍然感谢回复:
SELECT * FROM <table> 
WHERE 
    CONCAT([to], [from], [timestamp]) 
    IN 
    (
     SELECT CONCAT([to], [from], MAX([timestamp])) FROM <table> 
     WHERE [to] = 'user01' GROUP BY [from]
    )