За последние 24 часа нас посетили 17517 программистов и 1721 робот. Сейчас ищут 1894 программиста ...

ID последней вставленной записи

Тема в разделе "PHP и базы данных", создана пользователем Dedov_Evgeniy, 18 окт 2015.

  1. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, нет, ты сравшиваешь даты. Тогда не понятно где затык. На вид выглядит хорошо.

    (`date_in` BETWEEN 'начало периода' AND 'конец периода') AND (`date_out` BETWEEN 'начало периода' AND 'конец периода')

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

    А че не так?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Помоему тему стоит разделить на "id последней записи" и "пересечение периодов", не?

    Про проверку пересечения периодов: http://artoodetoo.ru/intersect-periods/
    Периоды времени (b1..e1) и (b2..e2) пересекаются если выполняется такое условие:
    Код (PHP):
    1. (b1 <= e2) AND (b2 <= e1) 
     
  3. Dedov_Evgeniy

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

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    т.е. вопрос решен?
     
  5. Dedov_Evgeniy

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

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Как рабочий вариант sql запроса - Да.
    Я просто не понял почему нельзя указать 2 колонки (expr) для выборки в BETWEEN:
    Код (PHP):
    1. expr BETWEEN min AND max
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Евгений, ты понял, что твои четыре битвина можно заменить на два неравенства?

    Добавлено спустя 1 минуту 29 секунд:
    потому что нельзя. язык SQL интерпретирует это не так как ты хочешь.
     
  7. Dedov_Evgeniy

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

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Да понял. Щас протестирую.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Ага, давай тестируй. Даже умные люди не могли поверить сходу. А оно действительно так. )))

    P.S. Тут есть маленькая тонкость: я подразумеваю, что период задан „включительно“, поэтому в неравенствах стоит меньше-или-равно. В противном случае надо было бы писать строго меньше.
     
  9. Dedov_Evgeniy

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

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Да, все четыре случая пересечения отрабатывают верно. То есть.
    1. Хвост заезжает
    2. Голова заезжает.
    3. Полностью период в периоде
    4. Несколько периодов в периоде
    Код (PHP):
    1. SELECT `id`, `box` FROM `orders`
    2. WHERE `box` =  32 AND
    3. ('2015-10-01' <= date_out AND date_in <= '2015-10-07')
    4.