... выбрать первыми тех кто в онлайне

entonee

Новичок
... выбрать первыми тех кто в онлайне

.. у меня была тема про то как показывать кто из пользователей в онлайне.. а кто нет

http://phpclub.ru/talk/showthread.php?s=&threadid=120314

все работает как часы... теперь мне надо вот что сделать..

выбираю из базы юзеров + рядом функцией проверяю в онлайне или нет((0) - офлайн, (1) - онлайн)

получается

-------------------

юзер1 (0)
юзер2 (0)
юзер3 (1)
юзер4 (0)
юзер5 (1)

-------------------

собственно надо как то сделать чтоб те кто в онлайне - юзер3(1) и юзер5(1)... были первыми в списке а после них уже все остальные... думал сначала в базу писать что чел в онлайне - но это не то, а что будет если чел просто закроет браузер? .. зависнит в онлайне...

сейчас думаю надо делать как то так - записать все данные в массив
--------------
юзер - онлайн/офлайн
--------------
а потом этот массив сортировать... но как это сделать не знаю... искал в гугле как записать данные из БД в массив... но он показывает как массивы в БД добавлять ...
-------------------

Спасибо заранее...
 

Фанат

oncle terrible
Команда форума
оператор добавления элемента в массив - квадратные скобки

$a = array();
$a[] = 1; // добавили в массив элемент.

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

другой вопрос - а сколько всего юзеров? не великоват ли массивчик получится?
 

tz-lom

Продвинутый новичок
может быть возможно функцию проверки перенести в запрос на базу и сортировать уже при запросе?
 

entonee

Новичок
... это список друзей пользователя...
про массивы я почитал .. и достаточно понял.. только вот

у меня читает из базы

echo $row['fid']."=>".isuseronline($row['fid']).",";

он мне выдает что надо

- пользовательский айди -

123549 => 0
123542 => 0
123545 => 1
123541 => 0

но это простым echo... а как мне добавить все это в массив.. чтоб можно было потом отсортировать по тому кто в онлайне.. а кто нет...
 

Фанат

oncle terrible
Команда форума
для того, чтобы вместо вывода сделать добавление в массив,
надо вместо оператора вывода написать оператор добавления в массив.
 

entonee

Новичок
tz-lom
а чем это поможет.. а таблице храниться только айдишки пользователя... и его друзей...

а проверка на онлайн идет через функцию...

function isuseronline($uid){
$sql = "select * from `online` where `uid` = '".mysql_real_escape_string($uid)."'";
$r = mysql_query($sql);
$rr = @mysql_fetch_assoc($r);
if(@mysql_num_rows($r) != 0){
$usrtime = $rr['utime'];
}else{
$usrtime = 0;
}
$raznica = (time() - $usrtime);
if($raznica > 300){
$ans = 0;
}else{
$ans = 1;
}
return $ans;

}

смотрит в базе время.. и текущее время..и сравнивает...

-~{}~ 18.10.10 22:10:

$flist = array();
while($row = mysql_fetch_array($query)){

$flist[] = isuseronline($row['fid'])."=>".$row['fid'];
}

rsort($flist);
foreach ($flist as $key => $val) {
echo $val;
}

--------------------

работает )) спасибо *****.. вы меня спасли 2жды за день..
огромное спасибо... если что обращяйтесь.. программист может я и никакой пока )).. но вот рисовать в фотошопе и флеш знаю очень хорошо ))...
 

tz-lom

Продвинутый новичок
entonee
дело в том что это действительно можно было бы делать быстрее и одним запросом,например таким:

"SELECT users.*, (".time()."-online.utime)<300 AS isonline FROM users LEFT JOIN online ON users.id=online.uid ORDER BY isonline DESC LIMIT 30"

тогда в isonline будет 1 0 или NULL если никаких данных об активности (удалённая сессия например)
 

entonee

Новичок
хм... сейчас попробую отпишусь... если так - то это намного лучше чем у меня...
 
Сверху