|
|
|
| Добрый день.
На сайте есть таблица с данными пользователей, назовем ее usermeta
Структура:
id | user_id | meta_key | meta_value
|
В этой таблице мы храним разные данные о зарегистрированном пользователе которые не входят в основную таблицу users
У каждого пользователя есть meta_key = lastvisit_time где хранится время последнего визита в виде данных из функции time();
Для того чтобы вывести пользователей онлайн пишу запрос:
<?php
function online_users() {
global $db;
$res = $db->get_results("SELECT user_id FROM usermeta
WHERE meta_key = 'lastvisit_time'
AND (".time()." - meta_value ) > '300'
ORDER BY user_id");
if(count($res) > 0) {
foreach ($res as $row) {
$return[] = $row->user_id;
}
} else {
$return = false;
}
return $return;
}
?>
|
Когда на сайте онлайн только 1 посетитель, запрос работает, но если посетителей более одного запрос не срабатывает.
В чем я ошибся? | |
|
|
|
|
|
|
|
для: ZetRider
(25.04.2012 в 08:36)
| | что такое meta_value? | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 09:33)
| |
meta_key varchar(255)
meta_value longtext
|
| |
|
|
|
|
|
|
|
для: ZetRider
(25.04.2012 в 09:34)
| | вы шутите?
для хранения времени есть свой формат
и какие вычисления вы хотите от строк? | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 09:35)
| | ясно, буду делать отдельно DATETIME
Если опустить глупость с полем, сам запрос корректен? | |
|
|
|
|
|
|
|
для: ZetRider
(25.04.2012 в 09:36)
| | вы так и не ответили что такое meta_value, (meta_key это lastvisit_time (и я даже не буду спрашивать почему поле называется meta_key, а не lastvisit_time)), мне надо знать что вы вычитаете
__
в любом случае это делается не так
а дошло до меня, я понял что вы хотите всех обмануть :)
поле таблицы должно содержать однородные данные, а в пытаетесь напихать туда все что можно | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 09:42)
| | Так сложилось что структура таблицы имеет вид мусорки из дополнительных данных для пользователей
id | user_id | meta_key | meta_value
1 | 1 | ключ | значение
2 | 1 | user_level | a:1:{s:10:"sub";s:1:"1";}
3 | 1 | lastvisit_time | 1335328868
4 | 2 | lastvisit_time | 1334944936
|
Вычитаю от текущего времени time() значение поля meta_value где ключ lastvisit_time
>> поле таблицы должно содержать однородные данные, а в пытаетесь напихать туда все что можно
Именно так :) понял свою ошибку, лучше создам отдельное место для данных типа даты время
>> в любом случае это делается не так
Сам запрос? или вообще принцип решения задачи?
--------- | |
|
|
|
|
|
|
|
для: ZetRider
(25.04.2012 в 09:52)
| | и принцип и в большей степени запрос | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 10:14)
| | спасибо, буду решать задачу опираясь на эту тему
http://softtime.ru/forum/read.php?id_forum=3&id_theme=545 | |
|
|
|
|
|
|
|
для: ZetRider
(25.04.2012 в 10:15)
| | можно и так, более лучший вариант сейчас не смогу предложить, не помню где он
но суть именно в отдельной таблице онлайн, из которой удаляются те кто уже неонлайн
там и идентификатор сессии регистрируется и тд.
если нужна статистика посещений, то это уже другая история и другая таблица | |
|
|
|