@Sergey_5

Как правильно выбрать наибольшее значение из базы за определенный период?

Здравствуйте.
Не совсем понимаю порядок действий mysql при обработке запроса, отсюда вопрос.
Что разумнее использовать для выборки максимального значения времени записи в таблицу по двум условиям ?
Мне не принципиально выбирать какие-либо поля или нет,
нужно просто отследить оставлял ли определенный пользователь ( условие 1 ) в определенном разделе ( условие 2 ) запись за последние 24 часа.
пользователь, раздел и запись содержат только соответствующие id и подгружать по ним информацию с других таблиц нет необходимости

  • 1. Выборка по условию плюс сортировка
    SELECT дата FROM таблица WHERE условие 1 и условие 2 DESC LIMIT 1
    if(дата > time()-24 часа){Запись есть};

    вариант не совсем верный так как при выборке добавляется еще действие сортировки


  • 2. Либо выборка по условию без сортировки
    SELECT дата FROM таблица WHERE условие 1 и условие 2 
    if(дата > time()-24 часа){Запись есть};

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


  • 3. Либо добавить еще одно условие
    SELECT дата FROM таблица WHERE условие 1 и условие 2 и дата > time()-24 часа
    mysql_num_rows()
    if(ноль строк){Записи нет};

    Или уж лучше тогда count() ( нашел иформацию что count будет работать быстрее чем mysql_num_rows )
    SELECT count(id) FROM таблица WHERE условие 1 и условие 2 и дата > time()-24 часа
    if(ноль строк){Записи нет};



  • 4. Или использовать
    SELECT MAX(дата)  FROM таблица WHERE условие 1 и условие 2
    if(дата > time()-24 часа){Запись есть};



Предложите, пожалуйста, вариант который бы меньше грузил сервер да и работал бы быстрее, при условии что записей в таблице будет сотни тысяч ( 1000 пользователей * 100 записей = 100 000 ) ?
Сам больше склоняюсь к MAX(дата) или count(id).
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
@pool
SELECT 1 FROM таблица WHERE условие 1 и условие 2 и дата >= UNIX_TIMESTAMP(NOW("-24H"))
+индексы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы