За последние 24 часа нас посетили 17632 программиста и 1719 роботов. Сейчас ищут 1867 программистов ...

А вот и жесть началась, не могу разобраться что не так

Тема в разделе "Сделайте за меня", создана пользователем antonio21, 14 сен 2016.

  1. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Вот так:

    PHP:
    1. SELECT `id_win` FROM `5minbidders` WHERE DATE_FORMAT(`time_start`, '%Y%m%d%H%i') = DATE_FORMAT(NOW() - INTERVAL 5 MINUTE, '%Y%m%d%H%i')
    по аналогии с минутой, только прописал интервал 5 минут
     
    #26 antonio21, 6 окт 2016
    Последнее редактирование модератором: 6 окт 2016
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну то есть "пять минут назад"? да? тут так вот и написано.
     
    denis01 нравится это.
  3. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Да, написано 5 минут назад, а как сделать, чтобы он показал за предыдущие 5 минут не пойму.
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да это легко делается-то. Не понимаю, почему ты до сих пор не прислушался к советам...
    --- Добавлено ---
    Можно одним запросом подготовить одну результирующую таблицу, в которой будут записи и за прошедшие 5 минут, и за 5 минут, которые предшествуют тем 5 минутам. И так далее пятиминутными отрезками. Одним запросом. Можно и ограничить только двумя пятиминутками. И это всё еще будет один запрос.
     
    denis01 нравится это.
  5. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Прислушиваюсь, видимо не понял. Как это сделать?
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да, ты не понял. Это мы уже выяснили. Советы были про то, что тебе надо сначала с теориями разобраться, а потом уже загружать себя практикой. Программирование это реализация некоторого алгоритма лексемами какого-то языка. А алгоритм в свою очередь решает какую-то задачу выполняя манипуляции над какими-то данными. Вот это всё ты просто ОБЯЗАН уметь делать. Но ты не. Увы.

    Язык программирования дает тебе инструменты. Твои данные будем считать стройматериалом. Твой алгоритм - планом строительства. Когда все правильно сделано, нужные инструменты применены в правильном порядке и в грамотной дозировке - у тебя получается классный дом. Иначе - у тебя получается куча дерьма, потраченного впустую времени и денег. Ты с завидным упорством пытаешься именно по второму пути идти.

    Ок, это твоё личное дело. Но что мешает тебе нанять профессионального строителя, который тебе построит дом, в котором будет не страшно ночевать? Гордость? Ты всё хочешь сам сделать? Ну оглянись просто на прошедшее время и на полученный результат. Все твои задачи решаются парой-тройкой запросов, которых ты не видишь в силу низкого скила в программировании. Тебе тут пытаются помогать, но результата всё нет и нет.

    Вывод одной таблицы, содержащей данные по пятиминутным отрезкам сводится в простом применении агрегации (это ты бы усвоил из теории по базам данных) и небольшой математической формулы (это в начальной и средней школе проходят) примененных в нужном порядке над определенными данными (это основы алгоритмизации программирования, опять же школьный курс). Фильтр по "за вот эти пять минут и те что перед ними но не более того" это просто один условный оператор (алгоритмизация программирования и основы баз данных) но который можно написать как минимум двумя разными способами (алгоритмизация программирования и основы баз данных).

    Твоя задача не какая-то там специфическая. Она просто напросто требует умения в обработке данных, представления промежуточного результата и так далее. А дальше ты уже сам решаешь как микропрограмму встроить в макропрограмму. Например, та же одна результирующая таблица может быть сделана несколькими путами. Ну самый красивый это естественно один раз построить её на стороне СУБД и потом на стороне клиента - в твоем случае это язык пхп - её обработать согласно принятым условным обозначениям. А можно сделать просто запрос фильтрующий последние 10 минут и потом на стороне пхп отфильтровать "эти пять" и "те пять что перед эти пять". А можно вообще просто каждый раз дергать всю таблицу и фильтровать на стороне пыха "эти" и "те". Да, решение люто говнокодное, но тем не менее оно решает же поставленную задачу, следовательно относится к рабочим решениям. Ну не совсем оптимальным, мягко говоря, но рабочим же.

    И вот ты уже определился в каком порядке, как, где и с какими данными ты работаешь. Остается только подобрать функции, реализующие этот алгоритм. И вот ты берешь из памяти или открываешь справочник и находишь там нужные тебе функции. Дальше ты соединяешь шаги между собой и проводишь отладку чтоб убедиться, что каждый шаг меняет состояние системы ожиданным и корректным образом. На выходе ты получаешь рабочий скрипт, который реализует выбранный алгоритм решения поставленной задачи.
     
    denis01 нравится это.
  7. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Какой же ты варенный и портишь этим этот форум, учу язык и сразу практикуюсь. Что не так? Зачем ты мне тут лекции читаешь, на фига иначе форумы?!!
    Обратился с вопросом и просьбой помочь подобрать функцию, сформулировал конкретный вопрос, а ты мне опять сочинение пишешь. Опять тебя в лирику потянуло(
    Решил вопрос пока так:
    PHP:
    1. FROM `bidders` WHERE `time_start` BETWEEN (NOW() - INTERVAL 10 MINUTE) AND (NOW() - INTERVAL 5 MINUTE);
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ладно, раз я порчу этот форум, то я пожалуй удалюсь
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Поздравляю, ваше сообщение вошло в фонд золотых цитат от новичков на PHP.RU.

    Так как автор не понимает, нафига форумы, тема переносится в "сделайте за меня". Там не надо понимать совсем ничего.
     
  10. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Вы, главное помните, что NOW() восходит к таймзоне сервера, чтобы не задаваться вопросами при переездах.
    Ну и да, на встроенных функциях, конкретно такой запрос не ок строить, лучше передавать статический параметр даты.
     
    artoodetoo нравится это.
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сессии скорее
     
  12. Poznakomlus

    Poznakomlus Активный пользователь

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    Не пишите NOW() - это главная ошибка вышеприведенных советчиков
    при использовании NOW() вы забудете про индексы и соответственно ваши запросы будут отрабатывать долго при больших данных запросы будут отрабатывать дольше по времени чем указано в настройках php, что соответственно будет приводить к ошибке.
    Передавате сформированную дату php отнимая нужное кол-во секунд используя UNIX_TIMESTAMP в базе и по полю сделайте индекс time_start.
    Проверяйте запросы с помощью EXPLAIN, это правило вы должны делать для всех запросов используемых в приложении для того, чтобы набить руку и приобрести необходимый опыт
     
  13. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    одно с другим никак не связано. Ну не забывай про индексы. NOW() ничего плохого не делает и не заставляет тебя про индексы забывать.
     
  15. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Всё верно, тут не нужно сломя голову везде отказываться от встроенных функций :). Нужно просто понимать какие значения от них ожидать и какие ограничения в конкретной субд могут вызвать.
     
  16. Poznakomlus

    Poznakomlus Активный пользователь

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    Про NOW() c кешированием спутал
     
  17. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    перевожу на русский:
    если запрос при следующем вызове должен вернуть другие результаты, кеширование на стороне MySQL невозможно.
    — К.О.

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

    например у вас есть запрос, выводящий сообщения из определённой темы на форуме. типа как для этой страницы :) кроме всего прочего он цепляет данные пользователей: кол-во сообщений и симпатий. пока на форуме ничего не происходит он прекрасно кешируется самим mysql и при повторном вызове отдаёт данные быстро.
    но как только любой пользователь получит симпу или у него изменится "дата последнего входа" или любое другое поле, которое нам вроде бы неинтересно, кеш нашего запроса анулируется. т.к. в нем участвует таблица пользователей.
     
    denis01 нравится это.