1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.1.x MySQL запрос для пользователей онлайн

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем swap, 31.03.2012.

Загрузка
  1. swap

    swap Активный пользователь

    Регистрация:
    14.10.11
    Сообщения:
    28
    Симпатии:
    21
    Версия XF:
    1.3.2
    В веб программирование толком не понимаю и кроме как какой нибудь страницы контакт,написать не смогу,в sql \ mysql тем более,подскажите пожалуйста как сформулировать запрос на вывод онлайн пользователей и где вообще можно посмотреть таблицы xenforo?
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Обычно хостер предоставляет доступ к базе данных. Там и смотреть. За сессии отвечают таблицы xf_session и xf_session_activity, таблица xf_user содержит информацию о пользователе. Вот только не знаю, получится ли таблицы сессий вытащить информацию онлайн, если в настройках кеширования будет стоять использование кеша сессий. Ведь в таком случае сессии не должны попадать в базу.
     
  3. swap

    swap Активный пользователь

    Регистрация:
    14.10.11
    Сообщения:
    28
    Симпатии:
    21
    Версия XF:
    1.3.2
    Тоже к этому пришёл,сделал дамп.
    xf_session_activity содержит по идеи ip user_id и т.д.
    Пробовал вывести так:
    PHP:
    <?php
    $forum_url 
    'forum/';
    include(
    $forum_url 'library/config.php');  
    mysql_connect($config['db']['host'], $config['db']['username'], $config['db']['password']);
    mysql_select_db($config['db']['dbname']);
    mysql_query ("set character_set_results='cp1251'");
     
    $sql "SELECT `user_id`, `ip`, `view_date` FROM `xf_session_activity` ORDER BY `user_id` DESC LIMIT 30";
     
    $result mysql_query($sql);
     
    if (!
    $result) {
        
    $message  'Неверный запрос: ' mysql_error() . "\n";
        
    $message .= 'Запрос целиком: ' $sql;
        die(
    $message);
    }
     
    while (
    $row mysql_fetch_assoc($result)) {
      echo 
    "Ip: ".$row['ip']."  \n";
    echo 
    "ID: ".$row['user_id']."  \n" ;
      echo 
    "view_date ".$row['view_date']."  \n";
     
    }
     
    mysql_free_result($result);
    ?>
     
    Отвечает вот так:
    Код:
      Ip: 1390428896
      ID: 360
      view_date 1333204380
      Ip: 1505602076
      ID: 341
      view_date 1333207469
      Ip: 1840148667
      ID: 239
      view_date 1333209561
      Ip: 3648405099
      ID: 1
      view_date 1333209048
      Ip: 1123633242
      ID: 0
      view_date 1333209452
      Ip: 1600946639
      ID: 0
      view_date 1333208101
      Ip: 1521881919
      ID: 0
      view_date 1333205452
      Ip: 1390428896
      ID: 0
      view_date 1333203785
      Ip: 1449845567
      ID: 0
      view_date 1333205828
      Ip: 1123631791
      ID: 0
      view_date 1333207709
      Ip: 2992490050
      ID: 0
      view_date 1333207702
      Ip: 3579280225
      ID: 0
      view_date 1333206235
      Ip: 1680561044
      ID: 0
      view_date 1333209650
      Ip: 2956753439
      ID: 0
      
    view_date 1333208998
    
    В принципе в реальном времени есть два пользователя,с id 1 and id 239,остальные двое вообще не понятно от куда берутся,так же выводится по указанному лимиту(попробую и без него конечно),а вот как с id получить имя пользователя,не понимаю,да честно говоря с sql первый раз столкнулся(да что там с web программированием вообще) и даже не знаю как вообще построить запрос на вывод имени с id,не говоря уже об view_date and ip.
     
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну как-то вот так надо:
    Код:
    SELECT xf_user.username, xf_session_activity.ip, xf_session_activity.view_date FROM xf_session_activity INNER JOIN xf_user ON xf_user.user_id=xf_session_activity.user_id ORDER BY view_date DESC LIMIT 30
    Обратите внимание, что сортировать нужно по дате, а не по id пользователя, если вы хотите получить самые свежие записи.
    ID под номером 0 - это гости. Поэтому их можно сразу отсечь путем использования INNER в запросе. Т.е. в выборку попадут только пользователи без гостей.
     
    swap нравится это.
  5. swap

    swap Активный пользователь

    Регистрация:
    14.10.11
    Сообщения:
    28
    Симпатии:
    21
    Версия XF:
    1.3.2
    Спасибо,сейчас будем пробовать.
     

Поделиться этой страницей