SELECT *, LAST (date_time) - PullRequest
       11

SELECT *, LAST (date_time)

1 голос
/ 19 февраля 2012

Я выполняю цикл while, чтобы получить самое последнее сообщение каждого разговора, однако я получаю сообщение об ошибке

[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 ]

2 голосов
/ 19 февраля 2012

Предложение GROUP BY идет после WHERE, перед предложением ORDER 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 ");
1 голос
/ 19 февраля 2012

Глядя на ваш запрос, вы, похоже, испытываете некоторые проблемы с упорядочением операторов.

Ознакомьтесь с Руководством MySQL по оператору выбора :

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 оператор должен предшествовать ORDER BY, затем следует LIMIT.Ваш порядок в выражении неверен.

Кроме того, как и в случае с Майком, вы должны использовать mysql_error(), чтобы увидеть, какая ошибка вызывает MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...