Помогите составить запрос к MySQL.

KeTal

Guest
Помогите составить запрос к MySQL.

Есть запрос к БД MySQL:

PHP:
$res=sql_query("SELECT user_regdate, user_posts, username, user_id from u_users LIMIT 5");
И кусок кода, который вычисляет переменную $posts_per_date:

PHP:
$regdate = $res['user_regdate'];

$nukedate = strtotime($regdate);

$memberdays = max(1, round( ( time() - $nukedate ) / 86400 ));

$posts_per_day = $res['user_posts'] / $memberdays;
Никак не могу этот код описать на MySQL. :(
Надо вытащить последние пять строчек, ORDER BY $posts_per_date. Как-то коряво попробовал ничего не получилось.
Как заставить MySQL расчитать $posts_per_date и вывести результат в порядке его убывания?
 

KeTal

Guest
PHP:
SELECT user_regdate, user_posts, username, user_id from u_users ORDER BY user_posts/(TO_DAYS(NOW())-TO_DAYS(user_regdate)+1) LIMIT 5
Выдает мне первые 5 строчек, по умолчанию, т.е. по user_id сортирует. Что тут не так?
 

SelenIT

IT-лунатик :)
А если вывести вычисленную величину? Что выдаст [sql]SELECT user_regdate, user_posts, username, user_id, (user_posts/(TO_DAYS(NOW())-TO_DAYS(user_regdate)+1)) AS posts_per_day from u_users ORDER BY posts_per_day DESC LIMIT 5[/sql]?
 

antson

Новичок
Партнер клуба
KeTal
Хмм. не пробывал в варианте SelenIT посмотреть
значения вычисленной переменной ?
посмотри также значения user_posts попробуй поделить их на
число дней прошедших с регистрации и сравнить, то что получилось у тебя ручками с тем, что возвращает запрос
 

KeTal

Guest
PHP:
SELECT user_regdate, user_posts, username, user_id, (
user_posts / ( TO_DAYS( NOW( ) ) - TO_DAYS( user_regdate ) + 1 ) 
) AS posts_per_day
FROM u_users
ORDER BY posts_per_day DESC 
LIMIT 5

Получается:
posts_per_day = NULL

Вот значения:
user_regdate, user_posts, username, user_id, posts_per_day

Сответственно:
Nov 10, 2000, 1989, Anonymous, 1, NULL

и т.д.
 

antson

Новичок
Партнер клуба
Меня сильно смущает настройка локали на дате
проверь еще
select TO_DAYS( NOW( ) ) as t1, TO_DAYS( user_regdate ) as t2
from u_users
 

KeTal

Guest
t1=732583 t2=NULL

а "Nov 10, 2000" преобразовывается ф-цией strtotime(), как я понимаю.
 

antson

Новичок
Партнер клуба
select date_format(kogda,'%Y-%m-%e')
посмотри на в мане мускула про функцию date_format
мог напутать в маске
 

SelenIT

IT-лунатик :)
KeTal
у тебя что, даты хранятся в виде строк а-ля "Nov 10, 2000" в VARCHAR? Это извращение. Есть же специальный тип DATE.
 

KeTal

Guest
SelenIT
это не у меня. Это у разработчиков phpnuke или phpbb. Незнаю, он у меня там как модуль стоит. :)

-~{}~ 30.09.05 02:01:

antson
все просмотрел. date_format из
'1997-10-04 22:23:00' может сделать 'November, 1997', а тут надо наоборот. Никакой подобной функции в мане мускла не не нашел. :(
 

antson

Новичок
Партнер клуба
KeTal
посмотри всетаки в структуре базы тип поля там правда
как предполагает SelenIT варчар ?
Ты пробовал делать запрос с использованием date_format
или только в мане прочитал про функцию.Если просто читал
то пойми в мане физически невозможно написать внутреннее представление даты в том виде как она храниться в полях datetime или дате . Поэтому в тексте используют YYYY-MM-DD
HH:II:SS
 

KeTal

Guest
antson
user_regdate varchar(20)

а ф-ей date_format пробовал разобрать по маске, как в мане описано. Все равно NULL.
 

antson

Новичок
Партнер клуба
KeTal
датеформат работает пл типу датавремя и дата.
варчар она не разбирает.
 
Сверху