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
Статус: Не в сети Регистрация: 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 ";
--------
А вот со вторым что-то непонятное - я пишу так
----------------
$query = " SELECT username,lastpost
FROM `userslist`
WHERE `lastpost` >= '$timekill' ";
Идея в том что в зависимости от знака в выражении `lastpost` ^^^ '$timekill' ";
где вместо ^^^ знак > или знак < или выводит все записи или ничего не выводит.
------------
Вот с ним и надо помочь (второй запрос)
_________________ У одних нефанатов рожи позеленели, у других рожи посинели. И только у правильных нефанатов рожи красные и довольные.
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";
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения