2013-04-18 3 views
4

ОК, так что я headech от поиска везде, как решить эту problem..Im пытается показать пользователей онлайн, но не все пользователи, только тот, кто находится в вашем списке друзей ..Mysql друзей онлайн дисплей

Я таблица с именем users_online и когда пользователь регистрируется на моем веб-сайте в этой таблице, автоматически создается 1 строка с датой, ip, именем, user_id и friend_array (где хранятся друзья всех друзей)

Так, например, я вхожу в систему мой сайт и строка создаются в таблице users_online. Я хочу видеть только своих друзей в Интернете, и эти друзья хранятся в столбце friend_array (1,5,16,5 (это номер идентификатора друзей)). Как я могу взять данные из col_ru_ru_ru и узнать, какой из этих идентификаторов зарегистрирован? на данный момент, что означает, какой из этих идентификаторов существует в таблице user_online и отображается в моем профиле?

Я надеюсь, что это не сбивает с толку вопрос ...

Ну вот мои code..all магазины в online.php файле:

// Checking wheter the visitor is already marked as being online: 
$inDB = mysql_query("SELECT user_id FROM users_online WHERE user_id=".$userid); 

if(!mysql_num_rows($inDB)) 
{ 
    // Selects some data required to insert into users_online table from users table 
    $DB = mysql_query("SELECT img,fname,friend_array FROM users WHERE user_id=".$userid); 
    while($row=mysql_fetch_assoc($DB)) 
    { 
    $img = $row['img']; 
    $fname = $row['fname']; 
    $farray = $row['friend_array']; 
    } 
    mysql_query(" INSERT INTO users_online (user_id,ip,img,fname,friend_array) 
        VALUES(".$userid.",'".$intIp."','".$img."','".$fname."','".$farray."')"); 
} 
else 
{ 
    // If the visitor is already online, just update the dt value of the row: 
    mysql_query("UPDATE users_online SET dt=NOW() WHERE user_id=".$userid); 
} 


// Counting all the online visitors: 
// Thats where i need to work out with friend array.. 
// I need to display all online friends only 
list($totalOnline) = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users_online")); 


// Outputting the number as plain text: 
echo $totalOnline; 
+0

Рассмотрите возможность использования колонки друзей в другой таблице и сохранения каждого друга новой строки, не в массиве. Также не вставляйте новую строку для каждого входа, но обновляйте текущее значение временной метки. Вы также можете использовать 'INSERT .... ON DUPLICATE KEY UPDATE online = NOW()' –

+0

Ну, я тоже об этом подумал. Чтобы создать другую таблицу и использовать только id, user_id и friends_id .. – AlwaysConfused

ответ

2
<?php 
    $friends = array(1,5,16); // Array of friends 
    $friendIDs = implode(',', $friends); // Turns array into string for SQL select statement 

    // Gets only friends info from DB 
    $sql = " 
     SELECT date, ip, name, user_id 
     FROM users_online 
     WHERE user_id IN (".$friendIDs.")"; 
?> 
+0

Хотя без удаления записей из таблицы user_online, когда они выходят из сети, вы не получите ожидаемых результатов после их выхода ... –

0

Вы должны рассмотреть вопрос об изменении схемы базы данных. Вот пример:

ПОЛЬЗОВАТЕЛЯ стол:

id | name | current_session_id 

USER_FRIEND_USER таблица (содержит друзей, которые пользователь добавил):

user_id | friend_user_id 

SESSION стол:

id | user_id | created_at | expires_at 

SQL запросов, чтобы получить список друзей для пользователя с id '?':

SELECT u.id, u.name FROM USER u 
    INNER JOIN USER_FRIEND_USER ufu ON (ufu.friend_user_id = u.id) 
    INNER JOIN SESSION s ON (s.id = u.current_session_id) 
    WHERE ufu.user_id = ? AND s.expires_at >= NOW(); 

Вот SQL Скрипки ссылка: http://sqlfiddle.com/#!2/34f83/1/0

2

разобрали ребята! Спасибо за вашу помощь!

//Selecting an array from db 
$DB = mysql_query("SELECT friend_array FROM users_online WHERE user_id=".$userid); 
    while($row=mysql_fetch_assoc($DB)) 
    { 
    $friend_array = $row['friend_array']; 
    $friends = array($friend_array); // Array of friends 
    $friendIDs = implode(',', $friends); 
    } 
// Counting all the online friends: 

list($totalOnline) = mysql_fetch_array(mysql_query(" 
     SELECT COUNT(*) 
     FROM users_online 
     WHERE user_id IN (".$friendIDs.")")); 


// Outputting the number as plain text: 
echo $totalOnline; 

Выход был 1 пользователь онлайн, как я был loged в 2 браузерах и в users_online таблице была создана 2 строки с идентификатором 1 и 2..And ид 1 имел 3 друзей в массиве (2,5,16) , а у пользователя с id 2 было (1,3). Так что в каждом из браузеров выход был 1..Uray! Я надеюсь, что этот вопрос поможет кому-то ... Я хочу использовать функцию обновления в таблице msql, и если пользователь выходит из системы, я просто удаляю строку в таблице users_online :)

Смежные вопросы