Я внедряю простую систему следования / подписчиков в MySQL. Пока у меня есть три таблицы, которые выглядят так:
CREATE TABLE IF NOT EXISTS `User` (
`user_id` INT AUTO_INCREMENT PRIMARY KEY,
`username` varchar(40) NOT NULL ,
`pswd` varchar(255) NOT NULL,,
`email` varchar(255) NOT NULL ,
`first_name` varchar(40) NOT NULL ,
`last_name` varchar(40) NOT NULL,
CONSTRAINT uc_username_email UNIQUE (username , email)
);
-- Using a middle table for users to follow others on a many-to-many base
CREATE TABLE Following (
follower_id INT(6) NOT NULL,
following_id INT(6) NOT NULL,
KEY (`follower_id`),
KEY (`following_id`)
)
CREATE TABLE IF NOT EXISTS `Tweet` (
`tweet_id` INT AUTO_INCREMENT PRIMARY KEY,
`text` varchar(280) NOT NULL ,
-- I chose varchar vs TEXT as the latter is not stored in the database server’s memory.
-- By querying text data MySQL has to read from it from the disk, much slower in comparison with VARCHAR.
`publication_date` DATETIME NOT NULL,,
`username` varchar(40),
FOREIGN KEY (`username`) REFERENCES `user`(`username`)
ON DELETE CASCADE
);
Допустим, я хочу написать запрос, который возвращает 10 последних твитов пользователей, за которыми следует пользователь с именем пользователя "Том". Каков наилучший способ записать этот запрос и вернуть результаты с именем пользователя, именем, фамилией, текстом и датой публикации.
Также, если через минуту я захочу снова запросить 10 последних твитов и предположить, что Том следует твиты в течение этой минуты, как я могу запросить базу данных, чтобы не выбирать твиты, которые уже были показаны в первом запросе?