получить самую старую дату для содержимого и проверить вторую таблицу на те же данные

0

В рамках проекта, над которым я работаю, я работал над сайтом, на котором пользователи могут добавлять и редактировать контент на разных страницах.

В настоящее время, когда кто-то добавляет раздел контента на страницу, он добавляется в таблицу "content" с столбцом с измененной датой и уникальным столбцом идентификатора. Однако, когда кто-то идет и редактирует эту запись, я беру информацию для этого ContentID в таблице "content" и создаю новую запись в таблице "changehist" с этой информацией (для отслеживания истории изменений для записей контента). после этого я затем обновляю таблицу содержимого новым контентом и датой его редактирования.

Таблица My Content содержит следующие столбцы:
ContentID, Heading, Content, DateModified, UserID

Таблица ChangeHist содержит следующее:
HistID, ContentID, Heading, Content, DateModified, UserID

То, что мне было предложено сделать, - это раздел, который показывает недавно добавленный контент (за последние 3 недели), но не последний обновленный контент (контент, добавленный год назад, но обновленный на прошлой неделе). В настоящее время я использую следующий запрос:

SELECT content.* 
FROM content 
WHERE 
   (NOT EXISTS 
      (SELECT 1 
      FROM changehist 
      WHERE  changehist.ContentID = content.ContentID)) 
AND content.DateModified > NOW() - INTERVAL 3 WEEK 
ORDER BY content.DateModified DESC

Моя проблема здесь в том, что если контент добавлен 3 часа назад и был отредактирован 2 часа назад, с моим текущим запросом, запись не отображается в результатах MYSQL.

Есть ли способ получить эту информацию в одном запросе или мне нужно использовать два отдельных запроса, по одному на каждую таблицу, и объединить два результата вместе в php?

  • 0
    Как бы вы сделали это с двумя запросами? Насколько я понимаю ваш вопрос, ваш результат - именно то, что вас попросили сделать. Вы хотите контент, который был недавно добавлен, но не обновлен недавно. Контент, который был добавлен 3 часа назад и отредактирован 2 часа назад, недавно обновлен, поэтому правильно его не показывать.
  • 1
    Если вы хотите показать контент, созданный за последние 3 недели, вам нужно описать свои таблицы, потому что я думаю, что это невозможно с вашей информацией. У вас есть DateModified с датой его создания / обновления в последний раз и списком изменений. Как узнать, когда контент был создан после его обновления?
Показать ещё 6 комментариев
Теги:

1 ответ

0
Лучший ответ

Вы должны добавить условие, чтобы получить все вновь вставленные.

SELECT 
    A.*
FROM 
    (SELECT ContentID, Heading, Content, DateModified, UserID
    FROM Content
    WHERE DateModified > NOW() - INTERVAL 3 WEEK
    UNION ALL
    SELECT ContentID, Heading, Content, DateModified, UserID
    FROM ContentHist 
    WHERE DateModified > NOW() - INTERVAL 3 WEEK) A
ORDER BY A.UserID, A.ContentID, A.DateModified DESC;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню