#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];
}