Перейти к содержимому


Фильтр по дате в запросе SQL

фильтр дата sql

Сообщений в теме: 16

#1 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 13:18

Нужно выбрать из таблицы 261 суммы полей. Это все работает, пока не пытаюсь поставить фильтр по дате.
Поле f4681 - это поле даты в таблице 261. В таблице есть записи и поля даты f4681 заполнены.

Что я делаю не так? Подскажите, плииз.

$ddat=substr($line['Дата'],0,10);

data_select_field(261,"sum(f4641) as kol,sum(f4661) as summa, "`status`=0 and f4631=$nomen and f4681<=$ddat");
Умные сайты на заказ
https://info.crm-master.info

#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 13:59

Просмотр сообщенияTony999 (11 Май 2014 - 13:18) писал:

Нужно выбрать из таблицы 261 суммы полей. Это все работает, пока не пытаюсь поставить фильтр по дате.
Поле f4681 - это поле даты в таблице 261. В таблице есть записи и поля даты f4681 заполнены.

Что я делаю не так? Подскажите, плииз.

Где вы пытаетесь? Код я бы сделал такой

data_select_field(261,"sum(f4641) as kol, sum(f4661) as summa ", "`status`=0 and f4631 = ", $nomen, " and left(f4681, 10) <= left('".$line['Дата']."', 10) ");
Поправил, с планшета туго писать). А что за переменная $nomen?

Сообщение отредактировал wondertalik: 11 Май 2014 - 21:57


#3 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 16:55

Не работает. Пишет ошибка синтаксиса лишние кавычки, вроде... (как включить вывод ошибок, чтобы он стразу не убирался с экрана я не знаю)
Кстати, мой код, который я привел, вполне нормально все фильтровал.... только вот с датой не получается....
Умные сайты на заказ
https://info.crm-master.info

#4 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 11 Май 2014 - 19:26

Просмотр сообщенияTony999 (11 Май 2014 - 13:18) писал:

Нужно выбрать из таблицы 261 суммы полей. Это все работает, пока не пытаюсь поставить фильтр по дате.
Поле f4681 - это поле даты в таблице 261. В таблице есть записи и поля даты f4681 заполнены.

Что я делаю не так? Подскажите, плииз.

$ddat=substr($line['Дата'],0,10);

data_select_field(261,"sum(f4641) as kol,sum(f4661) as summa, "`status`=0 and f4631=$nomen and f4681<=$ddat");

Запятую уберите после summa, и поставьте ее перед `status` + не хватает двойной кавычки

data_select_field(id таблицы, "поля выбора", "условия");
data_select_field(261,"sum(f4641) as kol,sum(f4661) as summa ","`status`=0 and f4631=$nomen and f4681<=$ddat");

Сообщение отредактировал maksn: 11 Май 2014 - 19:35

"...Сижу, паяю. CRM починяю..."
Мои разработки

#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 20:00

Исправил ответ, тону я там задал вопрос. Жду ответа. Максн советую документацию почитать внимательный по оформлению кода. Это не упрек, это совет. И для сравнения дат очень советую использовать конструкцию с left.

Сообщение отредактировал wondertalik: 11 Май 2014 - 20:04


#6 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 21:45

$res1=data_select_field(261,"sum(f4641) as kol,sum(f4661) as summa", "`status`=0 and f4631=$nomen");
Так все и было... и работает, но как только фильтр по дате не прицеплял - ничего не получалось: или ошибка вычисления, или 0 записей находит, хотя они есть.. и с датой, подходящей по условиям.
$nomen - это номенклатура, с ней все ок, фильтрует по этому полю.

Сообщение отредактировал Tony999: 11 Май 2014 - 21:48

Умные сайты на заказ
https://info.crm-master.info

#7 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 21:51

Свяжитесь со мной по скайпу, контакты в профиле!

#8 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 21:56

Для wondertalk, попробовал Ваш код:

SELECT sum(f4641) as kol, sum(f4661) as summa FROM `f_data261` WHERE `status`=0 and f4631 = 19 and left(f4681, 10) <= left(2014-05-11 00:00:00, 10)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00:00:00, 10)' at line 1

Для этого я пытался эти нули убрать: $ddat=substr($line['Дата'],0,10);

Но все равно пока не работает....
Умные сайты на заказ
https://info.crm-master.info

#9 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 21:58

Просмотр сообщенияTony999 (11 Май 2014 - 21:56) писал:

Для wondertalk, попробовал Ваш код:

SELECT sum(f4641) as kol, sum(f4661) as summa FROM `f_data261` WHERE `status`=0 and f4631 = 19 and left(f4681, 10) <= left(2014-05-11 00:00:00, 10)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00:00:00, 10)' at line 1

Для этого я пытался эти нули убрать: $ddat=substr($line['Дата'],0,10);

Но все равно пока не работает....
Попробуйте ещё раз, я его там подправил. Пока в дороге, поэтому только с планшета! Что за переменная номен?

Сообщение отредактировал wondertalik: 11 Май 2014 - 22:01


#10 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 22:05

$res1=data_select_field(261,"sum(f4641) as kol, sum(f4661) as summa ", "`status`=0 and f4631 = ", $nomen, " and left(f4681, 10) <= left(".$line['Дата'].", 10) ");

Да, пробовал исправленный вариант, вот он ошибку и дает. Нули убрать - работает, но записей 0. Фильтр по дате убрать - все находит.
Меня больше волнует, как прочитать поле f4681, хотя я точно знаю, что это обычно поле Дата в таблице 261.
Через echo какую-то ерунду выводят всем поля Дата, типа 1982 - и все. Наверное, неправильно вывожу.

Спасибо за отклик, по скайпу сейчас не могу...
Умные сайты на заказ
https://info.crm-master.info

#11 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 22:07

Вы не поняли, я только что исправил. Ещё раз скопируйте и попробуйте и где вы используете это вычисление?

Сообщение отредактировал wondertalik: 11 Май 2014 - 22:12


#12 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 22:50

Да я вроде скопировал и попробовал Ваш последний вариант (см. предыдущий пост).
Таблица 261 - это обычная подчиненная таблица, где есть поля Номенклатура ($nomen - это связь, число значит), Кол-во, Сумма, Дата..
В запросе нужно посчитать сумму Кол-ва и сумму Суммы до определенной даты, меньшей, чем в указано в переменной $line['Дата'] главной таблицы.
Если я считаю без фильтра по Дате, то все ок, я получаю Кол-во и Сумму нужной мне номенклатуры во всей таблице 261 и таким образом узнаю среднюю себестоимость этой номенклатуры. Однако, для того, если потом я захочу что-то изменить, добавить или списать товар задним числом, то мне надо знать себестоимость этой номенклатуры на конкретную дату... Такая вот задача...
Не знаю, помогут ли Вам эти подробности... Но все равно спасибо за помощь!
Умные сайты на заказ
https://info.crm-master.info

#13 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 22:59

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

data_select_field(261,"sum(f4641) as kol, sum(f4661) as summa ", "`status`=0 and f4631 = ", $nomen, " and left(f4681, 10) <= left('".$line['Дата']."', 10) ");

Сообщение отредактировал wondertalik: 12 Май 2014 - 02:24


#14 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 412 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 11 Май 2014 - 23:07

Супер!!!!!!!! Все работает, как нужно!
Many many thank's!!!!!!!!!!!!
Умные сайты на заказ
https://info.crm-master.info

#15 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Май 2014 - 23:08

Поздравляю!

#16 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 11 Май 2014 - 23:56

Просмотр сообщенияwondertalik (11 Май 2014 - 20:00) писал:

Максн советую документацию почитать внимательный по оформлению кода. Это не упрек, это совет.

wondertalik
Спасибо, конечно, за советы, но...Какого оформления? какого кода? Вы это о чем? Я всего лишь показал где ошибки в data_select... у ТС
, что приводило к генерации SQLError. См. цитаты ниже

Просмотр сообщенияTony999 (11 Май 2014 - 13:18) писал:

$ddat=substr($line['Дата'],0,10);

data_select_field(261,"sum(f4641) as kol,sum(f4661) as summa, "`status`=0 and f4631=$nomen and f4681<=$ddat");

Просмотр сообщенияTony999 (11 Май 2014 - 16:55) писал:

Не работает. Пишет ошибка синтаксиса лишние кавычки, вроде... (как включить вывод ошибок, чтобы он стразу не убирался с экрана я не знаю)

Встречное предложение. Раздавайте советы тем, кто их спрашивает. Тоже не упрек, а пожелание :rolleyes:

Сообщение отредактировал maksn: 12 Май 2014 - 01:24

"...Сижу, паяю. CRM починяю..."
Мои разработки

#17 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Май 2014 - 01:41

Да приводило из-за моей невнимательности, в силу того что с планшета на 2г писать весьма затруднительно, поэтому поправил. Мое личное мнение, если уже редактировать код, то редактировать его по всем требуемым нормам. Спасибо за замечания!

Сообщение отредактировал wondertalik: 12 Май 2014 - 01:51






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных