Получить 10 самых последних обновленных или созданных записей из одной таблицы - PullRequest
0 голосов
/ 26 марта 2012

У меня есть такая таблица

CREATE TABLE `TEST_A` (
`test_a_id` int(11) NOT NULL AUTO_INCREMENT,
`added_by` int(11) DEFAULT NULL,
`added_date` datetime DEFAULT NULL,
`modified_by` int(11) DEFAULT NULL,
`modified_date` datetime DEFAULT NULL,
 PRIMARY KEY (`test_a_id`)
);

Мне нужно сформировать запрос MYSQL, чтобы получить самые последние записи, которые были либо созданы, либо обновлены. То, что я пытался сделать, это написать SQL-запрос с заказом по предложению на add_date и updated_date с desc, как это

Select * from TEST_A order by added_date desc, modified_date desc limit 10;

но это дает мне записи в последовательности самой последней добавленной даты, а затем самой последней измененной даты, что для меня неверно

Как это должно работать, если я изменяю или добавляю запись, то она должна быть первой в списке. Одно из решений, которое приходит мне в голову, - это сравнить updated_date_dateed_date_date и date_date с текущей системной датой и расположить их соответствующим образом, но этот тип запроса будет очень медленным, если мне придется отображать записи без указания какого-либо ограничения. в основном я использую этот тип запроса в моих функциях поиска.

Есть мысли?

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Вы, вероятно, хотите это:

ORDER BY GREATEST(added_date, modified_date) DESC LIMIT 10

При правильных индексах все должно быть в порядке. Если это огромный стол, то, возможно, вам лучше воспользоваться решением, предлагаемым KernelM здесь

2 голосов
/ 26 марта 2012

Я бы установил модифицированную дату при вставке (то же самое, что и добавленная дата), так что вам просто нужно сделать заказ по измененной дате.

0 голосов
/ 26 марта 2012

SELECT * FROM TEST_A ORDER BY, изменено_дата DESC, добавлено_дата DESC LIMIT 10;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...