Выборка последних записей для каждого типа - MySQL
Формулировка задачи:
Здравствуйте! Есть три таблицы:Мне нужно выбрать для каждой темы самый свежий комментарий с названием этой темы и (то что как раз не могу сделать) имя пользователя, оставившего его. К тому-же выбрать нужно только комментарии за последние сутки.
Собственно, выводит мне почти то что нужно (не считая имени автора комментария)
А вот этот запрос выводит в принципе нужные IDшники как тем, так и авторов последних комментариев.Проблема в том, что запрос типа не работает - лепит ошибку #1052 - Столбец 'creator_id' в where clause задан неоднозначно
Вопрос: как решить задачу? И возможно ли это вообще(есть подозрения, что ошибка возникает потому, что в результате creator_id может встретиться несколько раз в записях. Т.е. 1 человек может являться автором последних комментариев хоть во всех темах сразу)
CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, login VARCHAR(32) BINARY NOT NULL UNIQUE, password VARCHAR(32) NOT NULL, email VARCHAR(64) NOT NULL UNIQUE ); CREATE TABLE threads( id INT PRIMARY KEY AUTO_INCREMENT, thread_name VARCHAR(128) NOT NULL UNIQUE, creator_id INT NOT NULL, description TEXT NOT NULL, FOREIGN KEY (creator_id) REFERENCES users(id) ); CREATE TABLE comments( id INT PRIMARY KEY AUTO_INCREMENT, thread_id INT NOT NULL, creator_id INT NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (creator_id) REFERENCES users(id), FOREIGN KEY (thread_id) REFERENCES threads(id) );
SELECT threads.thread_name, content,created_at FROM (SELECT * FROM comments WHERE id IN (SELECT MAX(id) FROM comments GROUP BY thread_id)) as last_com,threads WHERE created_at >= NOW() - INTERVAL 1 DAY AND threads.id=thread_id
SELECT * FROM (SELECT * FROM comments WHERE id IN (SELECT MAX(id) FROM comments GROUP BY thread_id)) as last_com WHERE created_at >= NOW() - INTERVAL 1 DAY ORDER BY thread_id
SELECT threads.thread_name, users.login, content,created_at FROM (SELECT * FROM comments WHERE id IN (SELECT MAX(id) FROM comments GROUP BY thread_id)) as last_com,threads, users WHERE created_at >= NOW() - INTERVAL 1 DAY AND threads.id=thread_id AND users.id=creator_id
Решение задачи: «Выборка последних записей для каждого типа»
textual
Листинг программы
SELECT threads.thread_name, users.login, content,created_at FROM (SELECT * FROM comments WHERE id IN (SELECT MAX(id) FROM comments GROUP BY thread_id)) as last_com,threads, users WHERE created_at >= NOW() - INTERVAL 1 DAY AND threads.id=thread_id AND users.id=last_com.creator_id
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д