@Fenix957

Как добавить несколько первичных ключей Mysql?

К примеру есть таблица users. У каждого user есть уникальный id. Записей более 10 000.
Также есть таблица books.У нее также есть уникальный id. Но их может быть более 10 миллионов.
В таблице books есть поле created в формате timestamp
Так вот теперь к сути вопроса. Каждый пользователь должен пометить книгу как прочитанную. И получить первую попавшуюся книгу которую не прочитал но притом разница с текущим timestmp и полем created не должна быть более 600 секунд. Если таких книг нет вернуть пустой результат.
Понимаю что нужна еще одна таблица.
Хотел изначально создать таблицу readBooks
UserId BookId
И методом исключения выдавать книги сортируя таймстамп /
Но есть ли более оптимальный способ.

Также как создать таблицу с 2 полям UserId BookId
где связка значение этих 2 полей должна быть уникальны.

Ну и дополнение .
в секунду может появиться 5-7 книг.
Пользователь может за 2 секунды примерно прочитать книгу.
Книги и пользователь взяты образно)
  • Вопрос задан
  • 397 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Я думаю как-то так:
create table users (
	id int primary key auto_increment
);

create table books (
	id int primary key auto_increment,
  	created timestamp,
  	index(created)
);

create table read_books (
	user_id int,
  	book_id int,
  	primary key (user_id, book_id)
);

select * from books
where UNIX_TIMESTAMP() - created < 600 and 
	not exists (
		select book_id 
	  	from read_books 
	  	where read_books.book_id = books.id and read_books.user_id = :user_id 
	)
limit 1;


Mysql fiddle
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы