За последние 24 часа нас посетили 16764 программиста и 1679 роботов. Сейчас ищут 1087 программистов ...

посчитать время и выбрать минимальное

Тема в разделе "PHP и базы данных", создана пользователем likser2, 12 янв 2016.

  1. likser2

    likser2 Новичок

    С нами с:
    12 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    здравствуйте. задача такая: есть таблица win (id, user, theme, stime, etime, sdate, edate). нужно высчитать сколько же потратил каждый пользователь времени на прохождение теста и выбрать минимальное. попробовал вот так:
    Код (PHP):
    1. SELECT *, MIN(etime-stime) AS time FROM win GROUP BY theme ORDER BY theme
    однако полученные цифры не совпадают с нужными: пользователь прошел тест за 54 секунды, а мой код выводит 10, и так у всех остальных. что я делаю не так?

    или же лучше было хранить время в формате unix и каждый раз переводить его?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а сейчас как?
     
  3. likser2

    likser2 Новичок

    С нами с:
    12 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    сейчас в четыре столбика sdate, edate, stime, etime
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в смысле что у тебя дата и время каждого события отдельно хранятся? можно было использовать одно поле с типом дата-время или да одно поле с юниксовой меткой времени.
     
  5. likser2

    likser2 Новичок

    С нами с:
    12 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    отдельно.. а вообще правильный ли запрос? сделал время в unix формате и все равно при таком запросе выдает неверные цифры
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тут не видно
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Запрос точно неправильный, т.к. звёздочка в селект при груп-бай это нонсенс.

    Какой смысл каждого из полей? Что значит выражение в min() ?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    из энд-тайма вычитается старт-тайм и потом вычисляется минимальная из разниц.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ну пусть так, но я вижу там еще edate, sdate. это что, дата и время хранятся раздельно?
    там скорее всего полный адъ с типами.

    автор, покажи create table для этой таблицы.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну да, скорее всего отдельно, ведь автор сам сомневается, спрашивая у нас:
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    у меня весь топик читать терпения не хватает. не настолько увлекательно )
    ну ладно, ты его видимо хорошо понимаешь.

    автор, хранить дату и время вместе можно не только как время юникс. есть типы DATETIME и TIMESTAMP. они хорошо приспособлены для вычислений со временем:
    http://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html
    http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
    но если в твоей логике косяк, то переделка типов скорее всего не поможет.