2016-01-12 3 views
1

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

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

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

+0

Я не эксперт по БД, но как вы можете достичь этого с помощью временных таблиц, поскольку они связаны сеансом? когда вы берете первые 50 в темп, второй логин будет принимать одинаковые 50, поскольку он не видит таблицу temp ... Или я ошибаюсь? – mloureiro

+0

Кстати, я не имел в виду SQL-таблицу temp. В таблице будет удерживаться строка только для временной. При входе в систему я выберу 50 строк, которые не существуют во временной таблице, и поместите их в эту таблицу. И очистите его после выхода из системы. Это плохой подход>. <. –

ответ

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

Благодарим за предложение! –

Смежные вопросы