Выборка последних записей для каждого типа - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть три таблицы:
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
выводит мне почти то что нужно (не считая имени автора комментария) А вот этот запрос выводит в принципе нужные 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
не работает - лепит ошибку #1052 - Столбец 'creator_id' в where clause задан неоднозначно Вопрос: как решить задачу? И возможно ли это вообще(есть подозрения, что ошибка возникает потому, что в результате creator_id может встретиться несколько раз в записях. Т.е. 1 человек может являться автором последних комментариев хоть во всех темах сразу)

Решение задачи: «Выборка последних записей для каждого типа»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы