// запрос на удаление всей истории переписки с пользователем //
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 //
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