Скажем, у меня 1000 строк в моем столе. И у меня есть пользователи, которые могут войти в мое приложение. Я хочу отобразить эти 1000 строк для 4 пользователей (но показывать только по 50 строк каждому из них), не видя их одинаковых строк. Я использую PHP и postgresql.
Я подумываю использовать временную таблицу для отображения данных и назначения данных для каждого входа, но есть ли другой способ сделать это без базы данных? Можно ли использовать сеанс php? Как вы думаете, как лучше всего это сделать?
Спасибо за ваш совет
Я бы предложил создать три таблицы.
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
. Таким образом, пользователи никогда не смогут получить значения, полученные другими пользователями.