在每个用户会话上显示不同的数据

时间:2016-01-12 14:50:32

标签: php postgresql

假设我的表中有1000行。我有用户可以登录我的应用程序。我想向4个用户显示这1000行(但只显示每行50行),而不会让他们看到相同的行。我正在使用PHP和postgresql。

我正在考虑使用临时表来显示数据并在每次登录时分配数据,但还有另一种方法可以在没有数据库的情况下执行此操作吗? 有可能使用php会话吗? 您认为这样做的最佳方法是什么?

感谢您的建议

1 个答案:

答案 0 :(得分: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条记录插入数据表中。每次从data表中获取50个随机结果时,请将这些值插入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

将检索到的值与当前用户ID一起插入users_data。这样,用户永远无法获得其他用户获得的值。