Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > MySQL Выборка по дате


Автор: apostolnikolai 3.7.2018, 11:20
Здравствуйте! Подскажите что я делаю не так.

Есть таблица 

__________________________________
--Cat№ -----StartData------StopData-------
------------------------------------------------
--9       ----- 03.07.2018 -- 03.08.2018 ---
--10     ----- 04.08.2018 -- 04.09.2018 ---
==========================

Не получается сделать выборку по дате

Код

$SystemData = 11.07.2018

$query ="SELECT * FROM Catalog_List WHERE DATE_FORMAT(StartDate, '%Y-%m-%d')>='".$SystemData."' AND DATE_FORMAT(StartDate, '%Y-%m-%d')<='".$SystemData."'";

Автор: Vardoulacha 3.7.2018, 11:22
Я просто оставлю это здесь http://tigor.com.ua/blog/2008/08/23/date_comparison_by_between_operator_of_mysql/

Автор: apostolnikolai 3.7.2018, 11:32
Код

$query ="SELECT * FROM Catalog_List WHERE DATE(StartDate) BETWEEN '02.07.2018' AND '02.07.2018'";

А в ответ белый экран

Добавлено через 4 минуты и 13 секунд
Код

$query ="SELECT * FROM Catalog_List WHERE DATE(StartDate) BETWEEN '2018-07-03' AND '2018-07-09'";


Белый экран (вывода данных нет)

Автор: apostolnikolai 3.7.2018, 12:00
А вот так выдает данные 

Код

$query ="SELECT * FROM Catalog_List WHERE DATE_FORMAT(StartDate, '%Y-%m-%d')>='".$SystemData."' OR DATE_FORMAT(StopDate, '%Y-%m-%d')<='".$SystemData."'";


А при AND нет

Код

$query ="SELECT * FROM Catalog_List WHERE DATE_FORMAT(StartDate, '%Y-%m-%d')>='".$SystemData."' AND DATE_FORMAT(StopDate, '%Y-%m-%d')<='".$SystemData."'";

Автор: whatisnot 3.7.2018, 12:41
 И для кого же условие? И есть ведь BETWEEN.

Автор: apostolnikolai 3.7.2018, 13:29
Ок я в php нуб а как его использовать если даты из двух колонок Start и Stop

Автор: whatisnot 3.7.2018, 14:35
Если в двух и первая, это минимальное значение, а вторая максимальное, то WHERE StartDate >= value AND StopDate <= value, и форматирования дат никакого не требуется. Вот только как можно получить диапазон мин/макс если параметр у обеих равен одному и тому же значению $SystemData, или макс. может быть менее мин., или наоборот? 

Автор: apostolnikolai 3.7.2018, 14:51
Код

$query ="SELECT * FROM Catalog_List WHERE StartDate >= '2018-07-05' AND StopDate <= '2018-07-06'";

Нет данных

Код

$query ="SELECT * FROM Catalog_List WHERE StartDate >= 2018-07-05 AND StopDate <= 2018-07-06";

тоже нет данных

Автор: whatisnot 3.7.2018, 15:30
Код

--
-- Структура таблицы `tmp`
--

CREATE TABLE `tmp` (
  `id` int(11) UNSIGNED NOT NULL,
  `StartDate` date NOT NULL,
  `StopDate` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `tmp`
--

INSERT INTO `tmp` (`id`, `StartDate`, `StopDate`) VALUES
(1, '2018-05-01', '2018-07-03'),
(2, '2018-04-03', '2018-07-03'),
(3, '2018-06-13', '2018-07-03');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `tmp`
--
ALTER TABLE `tmp`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--



Запрос 'SELECT * FROM tmp WHERE StartDate >= "2018-05-01" AND StopDate <= "2018-07-03"'

Результат

Код

Array
(
    [0] =>
        (
            [id] => 1
            [startdate] => 2018-05-01
            [stopdate] => 2018-07-03
        )

    [1] =>
        (
            [id] => 3
            [startdate] => 2018-06-13
            [stopdate] => 2018-07-03
        )

)



Автор: apostolnikolai 3.7.2018, 15:59
Вот так работает Если StartDate в базе равно 2018-07-03 а StopDate равно 2018-07-12
 
Код

$query ="SELECT * FROM Catalog_List WHERE StartDate >= '2018-07-03' OR StopDate <= '2018-07-12'";


А так нет
Код

$query ="SELECT * FROM Catalog_List WHERE StartDate >= '2018-07-04' OR StopDate <= '2018-07-04'";


Добавлено через 2 минуты и 6 секунд
Простите не OR а AND

Добавлено через 6 минут и 59 секунд
Все ОГРОМНОЕ СПАСИБО !!! Нашел ошибку!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)