Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Member
Статус: Не в сети
Регистрация: 15.01.2006
Откуда: Минск
Стал самостоятельно изучать php
Поставил веб-сервер Денвер web.dklab.ru
Стал писать чат
Возникли 2 проблемы с написанием sql-запроса
1) Нужно из таклицы выбрать только 10 последних записей, причём они должны быть отсортированиы сверху-вниз т.е. 510-я, 511-я, ...., 520-я, причем количество записей неизвестно заранее (хочтя как узнать их количество я знаю, но их количество постоянно изменяется)
Вот сам запрос
$query = "SELECT time,username,message FROM messages";
Подскажите как правильно составить

2)
Есть таблица с 2-мя полями Username(varchar) и lastpost(time)
В username вносится имя пользователя, в lastpost вносится время отправки сообщения.
Нужно удалить из таблицы записи где разница между временем сообщения и настоящим временем составляет 10 и более минут.
Время 10 минут назад я узнаю таким кодом
$timekill = strftime("time %H:%M:%S", mktime( date("H"), date("i")-10, date("s") ));

Теперь надо создать sql-запрос

$query = "DELETE FROM userslist where lastpost<'$timekill' ";

На этот запрос мне выдаётся
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in w:\home\xchat.by\www\userslist.php on line 35

Помогите правильно составить запрос.

БОЛЬШОЕ СПАСИБО за помощь в изучении PHP!

_________________
У одних нефанатов рожи позеленели, у других рожи посинели.
И только у правильных нефанатов рожи красные и довольные.



Партнер
 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
1) "SELECT time,username,message FROM messages order by time desc limit 10"


а потом переверни если хочешь...

$result = mysql_query($query);
$arr = array();
while ($row = mysql_fetch_array($result)) {
$arr[] = $row;
}

$arr = array_reverse($arr);

2) Советую сменить тип lastpost на datetime или на timestamp..

а так $timekill = date("H:i:s", time()-10*60);

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 15.01.2006
Откуда: Минск
Спасибо, хотя с 1-й запросом сам догодался
--------------
$query = "SELECT time,username,message FROM messages";
$result = mysql_query($query);
$num_res1 = mysql_num_rows($result);
// если >15 то отнять 15
if ($num_res1>15) $num_res1=$num_res1-15;
else $num_res1=0;
// выбрать 15 последних записей с упорядочиванием по полю id

$query = "SELECT time,username,message FROM messages
ORDER BY id LIMIT $num_res1 , 15 ";
--------

А вот со вторым что-то непонятное - я пишу так
----------------

$timekill = strftime("time %H:%M:%S", mktime( date("H"), date("i")-10, date("s") ));

echo $timekill;

$query = " SELECT username,lastpost
FROM `userslist`
WHERE `lastpost` >= '$timekill' ";

Идея в том что в зависимости от знака в выражении `lastpost` ^^^ '$timekill' ";
где вместо ^^^ знак > или знак < или выводит все записи или ничего не выводит.
------------

Вот с ним и надо помочь (второй запрос)

_________________
У одних нефанатов рожи позеленели, у других рожи посинели.
И только у правильных нефанатов рожи красные и довольные.


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
Код:
$timekill = strftime("time %H:%M:%S", mktime( date("H"), date("i")-10, date("s") ));

Зачем так сложно и зачем это «strftime("time»?

напиши
Код:
$timekill = date("H:i:s", time()-10*60);

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
Откуда: Харьков
Код:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in w:\home\xchat.by\www\userslist.php on line 35

Функцию mysql_num_rows безполезно использовать после mysql_query с делитом/апдейтом. Если ты хочешь узнать сколько тебе снесло строк - используй mysql_affected_rows

Дальше. Ты можешь обойтись и без php функций strftime и без date. Условие ты можешь задать прямо в SQL запросе

Код:
$query = " SELECT username,lastpost
FROM `userslist`
WHERE `lastpost` >= current_timestamp - interval 10 minute";


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan