选择VARCHAR列的最大值 - MySQL

时间:2016-05-04 12:43:29

标签: php mysql

我的消息收件箱概念电子邮件表是表中的主要内容。我想收到特定电子邮件发送的最后一条消息。

tbl_msg:

id
email
msg

示例数据:

Id  email            msg
1   xyz@gmail.com    This is test    
2   abc@gmail.com    All is well
3   xyz@gmail.com    This is test2

我希望每封电子邮件和消息的最后一次出现

Id  email            msg

2   abc@gmail.com    All is well
3   xyz@gmail.com    This is test2

我尝试了什么:

SELECT cnote.`id`,cnote.`email`,cnote.`msg` FROM `tbl_msg` cnote inner join (select distinct email,id from client_com group by email) as note
on cnote.id=note.id

如果我错了,请指导我

5 个答案:

答案 0 :(得分:2)

要获取表格中每个电子邮件地址的最新消息,您不需要JOIN,只需ORDERGROUP BY:< / p>

SELECT `id`, `email`, `msg`
FROM `tbl_msg`
GROUP BY `email`
ORDER BY `id` DESC

答案 1 :(得分:1)

使用此查询:

SELECT m1.* FROM tbl_msgs m1 LEFT JOIN tbl_msgs m2  ON (m1.email = m2.email AND m1.id < m2.id) WHERE m2.id IS NULL;

这将与同一个表连接,条件为m1.id < m2.id,将获得最新的一个。

另一个选择是使用子查询:

SELECT * FROM tbl_msgs WHERE id IN (SELECT MAX(id) FROM tbl_msgs GROUP BY email);

答案 2 :(得分:0)

您可以使用此查询:

SELECT id, email, msg FROM you_table 
GROUP BY email
ORDER BY id DESC

使用这个,每封电子邮件只有1行,而你将拥有最后一行,因为它是按ID DESC排序的。

答案 3 :(得分:0)

如果您正在运行PDO连接(我知道这样做,不确定是否有MySQLi方式)

$theLastIdGiven = $handlerDbConnection->lastInsertId();

或者如果你想通过一个查询来运行它,并获得最后的结果,只需添加ORDER BY id DESC LIMIT 0, 1,这将按降序形式按id排序数据然后得到第一位数据:)

希望这有助于你!

答案 4 :(得分:0)

SELECT ID,email,Msg FROM tbl_msg WHERE ID IN( (SELECT MAX(ID)FROM tbl_msg GROUP BY email))