2014-10-04 42 views
0

我有一个消息页面,我只需要从每个用户获取最后一条消息,我的数据库如下:msg_id,message,userid,toid,datecreated 它的一个PHP聊天,我只需要最后的消息从每个用户我如何只从表中提取最后一个条目

即时得到结果这样

<?php 
$sqlmessages = mysql_query("SELECT * FROM messages WHERE toid=$logid"); 

while($runrows = mysql_fetch_assoc($sqlmessages)) 
{ 

$aid = $_POST ['m_id']; 
$message = $runrows ['message']; 
$userid = $runrows ['uid']; 
$toid = $runrows ['toid']; 
$date = $runrows ['datecreated']; 


?>    

<?php echo $message;?> 


<?php } ?> 

我需要改变SQL,只是从数据库中获取的最后一条消息,任何想法?

+0

尝试使用'mysqli_ *'功能,而不是'mysql_ *'功能。 – Joe 2014-10-04 03:14:12

+0

你尝试使用限制吗? ** SELECT * FROM message WHERE toid ='..'ORDER BY datecreated DESC LIMIT 1 ** – Mehmet 2014-10-04 03:58:44

+0

你解决了这个问题吗?考虑到我的答案 – iatboy 2014-10-05 12:30:08

回答

1

试试这个:

$sqlmessages = mysql_query("SELECT * FROM messages WHERE toid=$logid ORDER BY msg_id DESC LIMIT 1"); 

编辑

然后像这样做:

$sqlmessages = mysql_query("SELECT * FROM messages WHERE toid=$logid GROUP BY(userid) ORDER BY msg_id DESC"); 
+0

,但不会工作,它会告诉我只有1条消息,如果我有多个用户的多条消息,我只想从每条消息看到最后一条消息我只会看到1条消息,谢谢 – 2014-10-04 03:19:14

0

试试这个:我假设$userid是你的用户的现场

$query = "SELECT * FROM messages WHERE toid=$logid GROUP BY $userid ORDER BY $date DESC"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
    echo $row['$userid']. " - $". $row['$message']; 
    echo "<br />"; 
} 
+0

你应该认真考虑转向PDO。 mysql在php 5.5中折旧,所以当你的主机提供者升级到php 5.5时,你的代码不会运行 – Fergoso 2014-10-04 03:37:14

0

思维的集:

SELECT 
    u.user_name, 
    u.uid, 
    m.m_id, 
    m.toid, 
    m.datecreated 
FROM 
    users u 
LEFT JOIN 
    /* auxilary table to create set of uid with max m_id*/ 
    (SELECT 
     uid, 
     MAX(m_id) max_id 
    FROM 
     messages 
    GROUP BY uid 
    ) a 
    ON u.uid = a.m_id 
LEFT JOIN 
    /* now join the messages again to get the latest message */ 
    messages m 
    ON a.uid = m.uid AND a.m_id = m.m_id 

如果只需要用户信息变化在内LEFT JOIN

相关问题