Отображение результатов после запроса MySQL JOIN с помощью PHP

#php #mysql

#php #mysql

Вопрос:

 $sql = "SELECT messages.text, users.name FROM messages INNER JOIN users ON messages.user_id=users.id ORDER BY messages.ms_id DESC LIMIT 10";
$result = mysql_query($sql);
$rows = array();
    while($row = mysql_fetch_array($result))
    {
            $rows[]=$row;
    }
    echo $rows[0][1].$rows[0][0];
/*         for($i=0;$i<=10;$i  )
                {

                                  echo $rows[i][1].$rows[i][0];

                }
*/
  

Предполагается, что этот скрипт покажет последние 10 сообщений в чате.Что я делаю, так это получаю имя пользователя из таблицы users и текст из таблицы сообщений, и я хочу отобразить их в моем окне чата.Прямо сейчас у меня записано только 4 сообщения, и я не знаю, как это влияет на весь скрипт, я должен реализовать проверку и для этого, но большая проблема в том, что когда я использую echo $rows[0][1].$rows[0][0]; , информация отображается правильно, но когда я пытаюсь создать цикл, чтобы я мог показать последние 10 (я попробовал прокомментированный), тогда ничего не отображается.Я думал, что по крайней мере, когда я использую этот цикл, я увижу 4 записанных сообщения, но на самом деле получается пустое окно.Очевидно, что у меня есть информация, записанная в $ rows [], и я могу повторить ее, но не понимаю, почему этот цикл вообще не работает.Я буду признателен, если кто-нибудь сможет помочь мне с этим и с проверкой, если сообщений меньше 10.

Спасибо.

Leron P.S Вот отредактированный скрипт, спасибо всем вам, мне нужен массив, потому что в противном случае вверху отображается самое последнее сообщение, которое не является вариантом, когда я использую его для воспроизведения сообщений чата.

  for($i=10;$i>=0;$i--)
            {
                      if($rows[$i][1]!="" || $rows[$i][0]!="")
                           {
                              echo $rows[$i][1].' : '.$rows[$i][0];
                              echo "</br>";
                           }
            }
  

Ответ №1:

Ваш цикл FOR выполнялся 11 раз, даже если всего 10 записей. Второе предложение должно быть < вместо <= . Плюс $ отсутствовала переменная i.

Например, на самом деле вам не нужно создавать массив из строк, и вы можете ссылаться на поля по имени:

 while($row = mysql_fetch_array($result))
{
    echo $row['name'] . ' says: ' . $row['message'] . '<BR>';
}
  

Ответ №2:

почему бы просто не сделать

    while($row = mysql_fetch_array($result))
    {
            echo $row[1]." ".$row[0];
    }
  

Ваш запрос автоматически ограничивает его последними 10, затем он покажет что-либо от 0 до 10, которое будет возвращено.

PS Я добавил пробел между именем пользователя и сообщением для удобства чтения

Ответ №3:

Вам нужны символы $ в вашей переменной i:

 for($i=0;$i<10;$i  )
{
   echo $rows[$i][1].$rows[$i][0];
}
  

Более надежное решение было бы таким:

 $sql = "SELECT messages.text, users.name FROM messages INNER JOIN users ON messages.user_id=users.id ORDER BY messages.ms_id DESC LIMIT 10";
$result = mysql_query($sql);

while($row = mysql_fetch_array($result))
{
   echo $row[1].$row[0];
}