2016-05-04 107 views
0

我的消息收件箱概念電子郵件表是表中的主表。我想獲取特定電子郵件發送的最後一條消息。爲VARCHAR列選擇最大值 - MySQL

tbl_msg:

id 
email 
msg 

示例數據:

Id email   msg 
1 [email protected] This is test  
2 [email protected] All is well 
3 [email protected] This is test2 

我想每封電子郵件和味精最後出場的

Id email   msg 

2 [email protected] All is well 
3 [email protected] 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 

指導我,如果我錯了

+1

你可能會被這個得太多。爲什麼不只是last_insert_id? –

+0

true ...只是獲取最後插入的記錄 –

+0

爲每個電子郵件獲取last_inserted_id? –

回答

2

要獲得最新訊息話題爲表中的每個電子郵件地址,你並不需要一個JOIN,你只需要ORDERGROUP BY

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

以上查詢給出語法錯誤 –

+0

給@SarathJasrin什麼語法錯誤? –

+0

#1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第2行用'group by email group LIMT 0,30'附近的正確語法使用 –

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); 
+0

這兩個查詢工作很好。謝謝! –

0

您可以使用此查詢:

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

有了這一個你必須每封郵件只有1行,你就會有最後的,因爲由id DESC命令。

0

如果您運行的是PDO連接(我知道的方式做到這一點,不知道是否有MySQLi的方式)

$theLastIdGiven = $handlerDbConnection->lastInsertId(); 

或者,如果你想通過查詢來運行它,並獲得最後的結果,只需加上ORDER BY id DESC LIMIT 0, 1即可以數據按id降序排序,然後得到第一位數據:)

希望這對你有所幫助!

+0

連接與查詢 –

+0

無關我知道這一點。我的意思是獲取最後一個ID的函數名是不同的,我不知道MySQLi的get last id函數的名字,就像PSM有一個get glid最後一個連接函數,PDO的一個是lastInsertId():)。 @JayBlanchard – Jek

+0

但是,這隻會得到一個結果,OP需要表中所有電子郵件的最後一條消息。 –

0

SELECT ID,電子郵件,消息從tbl_msg WHERE ID IN( (SELECT MAX(ID)FROM tbl_msg GROUP BY電子郵件))