Как вывести пользователей, которые ещё небыли просмотрены админом?

Тема в разделе "Базы данных", создана пользователем verfaa, 16 янв 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    В БД MySQL на сайте есть таблица users.
    При входе в админку сайта, админ переходит в раздел "Все пользователи" и ему выдается список анкет пользователей, разбитых постранично (по 10 профайлов на страницу), отсортированных по убыванию - DESC.
    Хочу заранее описать ситуацию, когда суточных регистраций может стать очень много и понадобится функция просмотра новых пользователей, которых админ ещё не видел.

    Догадываюсь, что в таблице users можно завести новое поле moderated (0,1) и помечать его единицей, когда юзер просмотрел пользователя (или пользователь "побывал" в выборке при посещении админом раздела "Все пользователи"). Только непонятно как лучше всего переписать SQL-запрос.

    Вот например, при заходе в раздел "Все пользователи" срабатывает SQL следующего вида:
    Код:
    SELECT DISTINCT a.id, a.icon_path, e.userid AS session
              FROM users a
              LEFT JOIN sesstbl e on a.id=e.userid
              WHERE a.status='1' AND a.visible='1' AND a.guest_user='0' AND a.id != '".intval($user)."'
              ORDER BY a.date_topsearched DESC, a.date_registration DESC
              LIMIT 0, 10
    Можно ли этот запрос модифицировать таким образом, чтобы для 10 результатов из выборки поле moderated таблицы users помечалось на 1?
    Или как здесь лучше сделать?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Чем переписывать сложный запрос в update, в твоём случае будет проще в php (или другом языке, который используешь для сайта) пройтись циклом по ответу и выбрать id в массив, затем сделать update

    PHP:

    while(...){ //или foreach, если запрос уже в массиве
    ...
    $for_update[] = $row['id'];
    }
    db_update("UPDATE `users` SET moderated = 1 WHERE id IN(" implode(','$for_update) .")");
     
    verfaa нравится это.
  3. tan_81

    tan_81 Постоялец

    Регистр.:
    18 окт 2006
    Сообщения:
    128
    Симпатии:
    30
    1 запросом без прокладок ничего и не выйдет хорошего т.к. писать в ту же таблицу, откуда и берутся данные нельзя
     
    verfaa нравится это.
Статус темы:
Закрыта.