Вы находитесь на странице: 1из 2

/////////////////// ИСПРАВЛЕНО ///////////////////////

// запрос на удаление всей истории переписки с пользователем //

DELETE FROM messages WHERE chat_id = (


SELECT chats.chat_id
FROM chats
WHERE private = 1
GROUP BY chat_id
HAVING SUM(user_id = 6) > 0 AND SUM(user_id = 7) > 0)

// запрос на получение списка всех диалогов, в которых участвует Ч1, в таком


// виде, как выводится список чатов в любом популярном мессенджере.
// Сложный запрос, работает! но наверняка есть что-то получше

SELECT t.chat_id, t.last_msg_id, users.username, contents.content FROM


(SELECT chats.chat_id, MAX(messages.content_id) as last_msg_id
FROM messages
INNER JOIN chats on messages.chat_id = chats.chat_id
WHERE chats.user_id = 3
GROUP BY chats.chat_id) as t
INNER JOIN contents ON contents.id = last_msg_id
INNER JOIN messages ON messages.content_id = last_msg_id
INNER JOIN users ON users.id = messages.from_id

// 1 запросы на создание всех таблиц в вашей базе данных //

CREATE TABLE `perfectum`.`users` (


`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE `perfectum`.`messages` (


`id` INT NOT NULL AUTO_INCREMENT,
`from_id` INT NOT NULL,
`chat_id` INT NOT NULL,
`content_id` INT NOT NULL,
`created_at`datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)

CREATE TABLE `perfectum`.`contents` (


`id` INT NOT NULL AUTO_INCREMENT,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE `perfectum`.`chats` (


`id` INT NOT NULL AUTO_INCREMENT ,
`chat_id` INT NOT NULL ,
`user_id` INT NOT NULL ,
`private` BOOLEAN NOT NULL DEFAULT TRUE,
PRIMARY KEY (`id`)
)
ALTER TABLE `messages` ADD FOREIGN KEY (`chat_id`) REFERENCES `chats`(`chat_id`) ON
DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `messages` ADD FOREIGN KEY (`from_id`) REFERENCES `users`(`id`) ON
DELETE RESTRICT ON UPDATE RESTRICT;

// 2 запрос при отправке сообщения от Человека 1 Человеку 2 //

INSERT INTO messages (from_id, chat_id, content_id) VALUES (3, 3, 100);


INSERT INTO contents (id, content) VALUES (100, "По чашечке кофе после работы?");

// 3 запрос на получение истории переписки между Ч1 и Ч2 //

SELECT users.username, contents.content, messages.created_at


FROM messages
INNER JOIN contents ON contents.id = messages.content_id
INNER JOIN users ON users.id = messages.from_id
WHERE messages.chat_id = (
SELECT chats.chat_id
FROM chats
WHERE private = 1
GROUP BY chat_id
HAVING SUM(user_id = 1) > 0 AND SUM(user_id = 2) > 0
)

// запрос на удаление одного сообщения в истории переписки //

DELETE FROM messages WHERE messages.id = 19

// Получение чата с найбольшим количеством пользователей //

SELECT chats.chat_id, count(chats.user_id) as user_count


FROM chats
GROUP BY chat_id
order BY user_count DESC
LIMIT 1

Вам также может понравиться