假设我的表中有1000行。我有用户可以登录我的应用程序。我想向4个用户显示这1000行(但只显示每行50行),而不会让他们看到相同的行。我正在使用PHP和postgresql。
我正在考虑使用临时表来显示数据并在每次登录时分配数据,但还有另一种方法可以在没有数据库的情况下执行此操作吗? 有可能使用php会话吗? 您认为这样做的最佳方法是什么?
感谢您的建议
答案 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
。这样,用户永远无法获得其他用户获得的值。