2012-02-19 77 views
1

我运行一个while循环来获取最新的每个会话的消息,但我得到的错误SELECT *,LAST(DATE_TIME)

[18-Feb-2012 21:14:59] PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /path/messages.php on line 44 

下面是完整的循环。它在我添加LAST(date_time)和GROUP BY对话之前有效,但我只想在每个对话中显示最新消息,而不是每个消息。我怎样才能做到这一点?

<?php 
    $current_user = user_info('id',1); //get logged in user id 
    $query = mysql_query("SELECT *, LAST(date_time) 
          FROM messages 
         WHERE user_to='$current_user' 
         ORDER BY date_time DESC 
         LIMIT 0,5 
         GROUP BY conversation"); 
    while($message = mysql_fetch_array($query)) { 
?> 
       <li><strong><?php user_info('first_name',0,$message['user_from']); ?> <?php $sender_last_name = user_info('last_name',0,$message['user_from']); ?></strong><span class="message_time"><?php echo time2str($message['date_time']); ?></span><br /> 
       <span class="message_description"><?php echo substr($message['content'],0,50); ?></span></li> 
       <?php } ?> 

谢谢。

回答

2

GROUP BY子句那张WHERE后,订单之前BY子句:

$query = mysql_query("SELECT *, LAST(date_time) 
          FROM messages 
         WHERE user_to='$current_user' 
         GROUP BY conversation 
         ORDER BY date_time DESC 
         LIMIT 0,5 "); 
+0

不错.....赶上..... – 2012-02-19 04:24:54

1

在查询看,你似乎有一些问题,语句的顺序。

看看在MySQL Manual on Select Statement

SELECT 
    [ALL | DISTINCT | DISTINCTROW ] 
     [HIGH_PRIORITY] 
     [STRAIGHT_JOIN] 
     [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 
     [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] 
    select_expr [, select_expr ...] 
    [FROM table_references 
    [WHERE where_condition] 
    [GROUP BY {col_name | expr | position} 
     [ASC | DESC], ... [WITH ROLLUP]] 
    [HAVING where_condition] 
    [ORDER BY {col_name | expr | position} 
     [ASC | DESC], ...] 
    [LIMIT {[offset,] row_count | row_count OFFSET offset}] 
    [PROCEDURE procedure_name(argument_list)] 
    [INTO OUTFILE 'file_name' export_options 
     | INTO DUMPFILE 'file_name' 
     | INTO var_name [, var_name]] 
    [FOR UPDATE | LOCK IN SHARE MODE]] 

GROUP BY语句应该来之前再接着LIMITORDER BY。您在声明中的排序错误。

此外,就像Mike提到的那样,您应该使用mysql_error()来查看MySQL抛出的错误。

+0

啊,不知道mysql_error位在哪里消失了.. – Sam 2012-02-19 10:47:45