Новые форумы для: пользователей, администраторов, математиков и филологов.
0

Здравствуйте.

Я только учу php, и для практики начал писать что-то типа чата. Код сначала вставляет сообщение в БД, потом вытаскивает его оттуда... но проблема в том, что извлекает из БД не с последнего, а с первого сообщения и тем самым новое сообщение выводится снизу страницы, а хотелось бы, чтобы оно выводилось сверху. Можно что-нибудь сделать? И еще, может кто-то подскажет правильно, какая последовательность должна быть у вывода сообщений?

Буду благодарен.

задан 22 Фев 9:52

NoProblems's gravatar image

NoProblems
496
50% принятых

изменен 22 Фев 9:54

%D0%A5%D1%8D%D1%88%D0%9A%D0%BE%D0%B4's gravatar image

ХэшКод
5.4k427

Код в студию, поля таблиц из БД тоже. какой запрос делаешь ну и т.д.

Представь что ты на допросе в полиции России, тебе задают кучу вопросов.

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

(22 Фев 9:58) Shrek
1

При выборке сообщений из базы используйте конструкцию ORDER BY. Здесь справочка по mysql Как правило в чате новые сообщения появляются снизу и уходят на верх.

ссылка

отвечен 22 Фев 10:03

%D0%93%D0%B5%D1%80%D1%80%D0%9A%D0%BE%D1%82%D1%8D's gravatar image

ГеррКотэ
1515

спасибо большее, особенно за справочник) почитал и все понял )

(27 Фев 14:52) NoProblems
2

Просто запрос нужно формировать как {ЗДЕСЬ ТОТ ЖЕ ЗАПРОС, ЧТО И БЫЛ} ORDER BY id desc, где id - уникальный идентификатор записи в базе.

ссылка

отвечен 22 Фев 9:58

ROOT's gravatar image

ROOT
1.4k14

изменен 22 Фев 19:46

Angry%20Bird's gravatar image

Angry Bird
609310

и Вас спасибо большее

(27 Фев 14:53) NoProblems

No Problem

(27 Фев 15:03) ROOT

и правда выводит все начиная с последней записи, но почему-то с выводом опаздывает) то есть пишешь текст, отправляешь в базу и он оттуда сразу должен вывести) такого не происходит) происходит, то что сначало заносит в базу ничего не выводя на экран, а потом при повторном только нажатии выводит) почему так? а вот если делать без ORDER BY id desc, то выводит прекрасно )

(28 Фев 7:47) NoProblems
2

В реляционной БД отсутствует понятие первая/последняя запись. Порядок выдачи записи определяется сортировкой результата, а это в свою очередь определяется инструкцией ORDER BY. В данном контексте, выдачу надо оформить примерно так:

SELECT MESSAGE_TIME, MESSAGE_TEXT from CHAT_MESSAGES ORDER BY MESSAGE_TIME DESC

В этом случае выдача будет отсортирована по убыванию времени сообщения (поле MESSAGE_TIME), так что самое свежее сообщение будет выдано первым.

ссылка

отвечен 28 Фев 10:40

Barmaley's gravatar image

Barmaley
6.1k111

спасибо не только за код, но и за полное разъяснение

(28 Фев 12:03) NoProblems
1

Или, как пример, можно заюзать PHP-функцию "mysql_fetch_array(ЗАПРОС)", которая возвращает поочередно записи, подходящие под запрос. В вашем случае это так:

$query = mysql_query("SELECT * FROM <имя таблицы в БД>");
while($data = mysql_fetch_array($query))
{
    // скопировать массив $data в глобальный
} // в итоге в глобальном массиве будет находиться последняя запись
ссылка

отвечен 22 Фев 11:34

Asen's gravatar image

Asen
1.4k115

изменен 8 Мар 14:44

%D0%A5%D1%8D%D1%88%D0%9A%D0%BE%D0%B4's gravatar image

ХэшКод
5.4k427

спасибо...

(27 Фев 14:54) NoProblems
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

ХэшКод - это совместно редактируемый форум вопросов и ответов для начинающих и опытных программистов.

Присоединяйтесь!

отмечен:

×3,039

задан
22 Фев 9:52

показан
158 раз

обновлен
8 Мар 14:44

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии