Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2017 13:29:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Это норма?

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



Офлайн

#2 Дек. 27, 2017 16:29:58

gorynych0
Зарегистрирован: 2017-12-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Это норма?

FishHook
Я удалил дополнительную таблицу. Итак, вот что я сумел написать для достижения нашей задачи:

 def no_sellings(request):
    sells = []
    for sell in Selling.objects.all():
        if (sell.selling_date.day, sell.selling_date.month, sell.selling_date.year) not in sells:
            sells.append((sell.selling_date.day, sell.selling_date.month, sell.selling_date.year))
    return HttpResponse(str(sells)

 Вывод: [(26, 12, 2017), (27, 12, 2017), (11, 10, 2017)])

Цель задачи:
Найти дни в которых не было продаж. Итак, у нас есть 3 дня в которых продажи были + у нас есть возможность произвольного выбора дня продажи (будь это хоть 2 век д.н.э), итого у нас есть все прочие дни за исключением 3 наших дней. Осталось их вывести.


Если серьёзно:
Я мог бы добавлять в 23:59 ежедневно, как день окончания дня ( для этого нужно создать отдельную таблицу days ), добавить логику в модель продажи, чтоб она изменяла значение there_is_selling в записи days, если продаж нету days в 23:59 записывалась как there_is_selling=False, если продажи были, то записывалась как there_is_selling=True, после, просто выводил бы записи с there_is_selling=False.
Только я не знаю как оптимизировать событие, что будет выполняться в 23:59, каждую минуту проверка на время? Мне кажется это глупо.

Отредактировано gorynych0 (Дек. 27, 2017 16:30:55)

Офлайн

#3 Дек. 28, 2017 05:58:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Это норма?

gorynych0
Если серьёзно:
Я мог бы добавлять в 23:59 ежедневно, как день окончания дня ( для этого нужно создать отдельную таблицу days ), добавить логику в модель продажи, чтоб она изменяла значение there_is_selling в записи days, если продаж нету days в 23:59 записывалась как there_is_selling=False, если продажи были, то записывалась как there_is_selling=True, после, просто выводил бы записи с there_is_selling=False.
Только я не знаю как оптимизировать событие, что будет выполняться в 23:59, каждую минуту проверка на время? Мне кажется это глупо.

Я повторяю. Так делать нельзя. У вас программа работает пять лет. Через пять лет заказчик просит дать ему сабжевый отчет, и вы не сможете этого сделать потому что у вас нет данных.

Итак, вот что я сумел написать для достижения нашей задачи:
Очень, очень плохое решение. Ну представьте, у нас пять лет работы фирмы, в среднем сто продаж в день. Это примерно 200 000 записей. Когда вы делаете вот так
 sells = []
....
 for sell in Selling.objects.all():
...
    if .... not in sells:
вы получите 40 миллиардов итераций по списку sells, ваш отчет будет строиться месяц. А решается задача одним SQL запросом.


Я не вижу смысла продолжать беседу. Вы спрашивали, что нужно знать на бэкенде. Вот вам ответ. Вы не знаете простейшего в программировании, не понимаете какие структуры данных использовать в каких случаях, не имеете представления о сложности алгоритмов. Вы не понимаете как работать с БД и что такое эффективность запросов. Не знаете sql. Даже ваш наивный код не решает поставленную задачу, потому что вы отдаете массив дат, в которых были продажи, а в ТЗ нужен массив дат, в которых их не было.
Вы научились подставлять данные в шаблоны и считаете, что это и есть “бэкенд”?



Офлайн

#4 Дек. 28, 2017 12:19:24

gorynych0
Зарегистрирован: 2017-12-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Это норма?

FishHook
Где вы возьмёте записи дней без продаж? Запись продажи проходит во время покупки пользователем товара. Про то, чтобы перекласть всю работу БД я подумал в первую очередь.

Офлайн

#5 Дек. 28, 2017 12:29:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Это норма?

gorynych0
вы знаете что такое group by?



Офлайн

#6 Дек. 28, 2017 12:54:03

gorynych0
Зарегистрирован: 2017-12-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Это норма?

FishHook
Нет, я вроде говорил, что начинающий в back-end, бд знаю на базовом уровне ( создай таблицу, выведи столбец).

Офлайн

#7 Дек. 28, 2017 15:31:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Это норма?

gorynych0
Вы получили ответ на свой изначальный вопрос?



Офлайн

#8 Дек. 28, 2017 17:07:03

gorynych0
Зарегистрирован: 2017-12-25
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Это норма?

FishHook
Можно сказать Да. Обработка информации на сервере.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version