Отображение разных данных по каждому сеансу пользователя

1

Скажем, у меня 1000 строк в моем столе. И у меня есть пользователи, которые могут войти в мое приложение. Я хочу отобразить эти 1000 строк для 4 пользователей (но показывать только по 50 строк каждому из них), не видя их одинаковых строк. Я использую PHP и postgresql.

Я подумываю использовать временную таблицу для отображения данных и назначения данных для каждого входа, но есть ли другой способ сделать это без базы данных? Можно ли использовать сеанс php? Как вы думаете, как лучше всего это сделать?

Спасибо за ваш совет

  • 0
    Я не эксперт по БД, но как этого добиться с помощью временных таблиц, поскольку они связаны сессией? когда вы берете первые 50 в темп, второй логин берет те же 50, так как он не видит временную таблицу ... Или я не прав?
  • 0
    Кстати, я не имел в виду временную таблицу SQL. Таблица будет содержать только строку для временного. Когда пользователь входит в систему, я получу 50 строк, которых нет во временной таблице, и положу их в эту таблицу. И очистите его после выхода из системы. Вроде бы плохой подход>. <.
Теги:

1 ответ

0
Лучший ответ

Я бы предложил создать три таблицы.

CREATE TABLE IF NOT EXISTS 'data' (
'id' int(11) NOT NULL,
'value' varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS 'users' (
'id' int(11) NOT NULL,
'name' varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO 'users' ('id', 'name') VALUES
(1, 'John'),
(2, 'Jane'),
(3, 'Bill'),
(4, 'Ben');

CREATE TABLE IF NOT EXISTS 'users_data' (
'id' int(11) NOT NULL,
'user_id' int(11) NOT NULL,
'data_id' int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE 'data'
ADD PRIMARY KEY ('id');

ALTER TABLE 'users'
ADD PRIMARY KEY ('id');

ALTER TABLE 'users_data'
ADD PRIMARY KEY ('id');

ALTER TABLE 'data'
MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE 'users'
MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

ALTER TABLE 'users_data'
MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT;

Теперь вы можете вставить 1000 записей в таблицу данных. Каждый раз, когда вы получаете 50 случайных результатов из таблицы data, вставляйте эти значения в таблицу users_data.

Чтобы выбрать значения из данных, выполните следующий запрос:

SELECT *
FROM data
WHERE data.id NOT iN (
    SELECT data_id
    FROM users_data
    WHERE user_id != '...current user id...'
)
ORDER BY RAND()
LIMIT 50

Вставьте полученные значения с текущим идентификатором пользователя в users_data. Таким образом, пользователи никогда не смогут получить значения, полученные другими пользователями.

  • 0
    Спасибо за ваше предложение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню