These are chat archives for LaravelRUS/chat

20th
Apr 2018
Eugene
@bloodrain777
Apr 20 2018 08:02
Всем привет! Мужики, можно вопрос по логике? Мож кто подскажет.....

Есть таблица агрегированных данных о визитах пользователей.
Назовем ее visitors_stat.

visitor_id | country | blocked_reason_id | date ......

Данные хранятся в сгруппированном виду по id, country, blocked_reason_id, date.

blocked_reason_id - id причины блокировки. Их может быть до 40.

blocked_reason_id = 1 // Блокировка по IP
blocked_reason_id = 2 // Хитрожопый и тд...

Задача:
Если пользователь выбирает в UI показать blocked_reason_id = 1 и 2
вывести данные за месяц к примеру в таком виде

visitor_id | country |          date          |  blocked_reason_1 | blocked_reason _2 |
------------------------------------------------------------------------------------------------------
        1       USA           2018-04-20       200  visits            500 visits
        2       BR            2018-04-18        500 visits            700 visits

Все бы ничего, если бы не blocked_reason_id вконце списка.......
Как эту херь вывести что то вообще не соображаю

Eugene
@bloodrain777
Apr 20 2018 08:14
Подзапрос чтоли?
am0nshi
@am0nshi
Apr 20 2018 08:16
Сделать джойн, группинг, конкатенацию для результата группинга если надо
Eugene
@bloodrain777
Apr 20 2018 08:22
Джоин таблицы самой с собой?
Eugene
@bloodrain777
Apr 20 2018 09:18
Решение SUM(case when blocked_reason_id = 1 then visits else 0 end) as blocked_reason_1
Anton Shelestov
@shelestovas
Apr 20 2018 10:33
Народ всем привет. а в последней версии laravel mail driver sendmail не работает больше?
projct1
@projct1
Apr 20 2018 11:50
подскажите плз, если у меня shared хостинг, то использование воркера для очередей невозможно
можно кроном обрабатывать очереди, так как он срабатывает каждую минуту?
projct1
@projct1
Apr 20 2018 12:02
@shelestovas вроде да, с 5.5 убрали, вместо этого log юзается
Eugene
@bloodrain777
Apr 20 2018 12:02
@projct1 Да на шареде не получится воркеры юзать. Запускай крон
projct1
@projct1
Apr 20 2018 12:03
@bloodrain777 ну а как запустить то все задачи в очереди?
Eugene
@bloodrain777
Apr 20 2018 12:03
@projct1 Можно крон пускать каждый 5 минут к примеру
@projct1 Так же само. На консольную команду
чтобы консольная команда запускала скрипт который будет брать пачку задач и выполнять
а вообще, шаред хостинги сейчас даже порой дороже чем выделенный сервер
@projct1 Ты из консоли можешь запустить выполнение своей задачи?
projct1
@projct1
Apr 20 2018 12:06
@bloodrain777 не могу)
@bloodrain777 $schedule->command('queue:work')->everyMinute(); запустит воркер же, а как мне пачку запустить чтоб обработало
Eugene
@bloodrain777
Apr 20 2018 12:11
@projct1 php artisan queue:work
projct1
@projct1
Apr 20 2018 12:12
@bloodrain777 не смотя на то что воркер не работает на шаред хостинге, задачи отработают?
Eugene
@bloodrain777
Apr 20 2018 12:13
@projct1 ты понимаешь что такое воркер вообще ?
projct1
@projct1
Apr 20 2018 12:13
@bloodrain777 нет)
@bloodrain777 ну это демон как бы, который постоянно запущен
Eugene
@bloodrain777
Apr 20 2018 12:14
@projct1
Вот так выглядит грубо говоря демон
while(true) {
доставай задачи и обрабатывай
}
@projct1 У тебя отличие только в том что у тебя не будет цикла
projct1
@projct1
Apr 20 2018 12:15
@bloodrain777 то есть ларка сама прочухает, запускать воркер или просто разово обработать задачи в очереди?
@bloodrain777 чувак, не покидай меня =)
Eugene
@bloodrain777
Apr 20 2018 12:20
@projct1
пишу тебе
projct1
@projct1
Apr 20 2018 12:21
@bloodrain777 О_о, спс )
Eugene
@bloodrain777
Apr 20 2018 12:27

@projct1

Смотри, в твоем случаи ты запускаешь 1 раз в минуту queue:work $schedule->command('queue:work')->everyMinute();
Чтобы это работало тебе надо поставить в крон на сервере задачу что то типа
* * * * * php /path/to/artisan schedule:run >>/dev/null 2>&1
Это чтобы полноценно можно было использовать шедулер laravel

Команда queue:work запускает процесс который будет выполнятся пока не умрет, на сервере скорее всего есть ограничение на время выполнения консольных скриптов.
Поэтому можно запускать это все дело и в ручную php artisan queue:work и через встроенные шедуллер как у тебя (только с постановкой задачи в крон).

Для обеспечения жизнеспособности queue:work на выделенном сервере тебе бы понадобился supervisor, который бы просто смотрел живет этот процесс или нет. Если нет то просто перезапускал бы его

как то так
projct1
@projct1
Apr 20 2018 12:34
@bloodrain777 ну да, крон у меня настроен, вопрос был на счёт очередей
@bloodrain777 круто, попробую, спасибо )
@bloodrain777 получается по крону по команде queue:work воркер запустится и умрёт сразу, но задачи с очереди останутся выполняться
Eugene
@bloodrain777
Apr 20 2018 12:37
@projct1 Нет не умрет, он будет выполняться пока его не кильнет сервер
@projct1 Если у тебя крон настроен дефолтный то все будет ок
projct1
@projct1
Apr 20 2018 12:38
@bloodrain777 да, дефольный
просто так как она каждую минуту срабатывает, то очередной запуск queue:work просто перезапустит же запуск задач?
а если некоторые из них ещё не выполнены, а тут снова запускается queue:work, и так каждую минуту...
подвисонов не будет?
Eugene
@bloodrain777
Apr 20 2018 12:39
@projct1 какие подвисоны? Он будет себе делать задачи. Его кильнули, прошла минута снова запустился
projct1
@projct1
Apr 20 2018 12:40
@bloodrain777 ну вот представь: задачки запустились, минута прошла, далее снова позыв запустить задачки, но предыдущие не завершились, новый запуск queue:work запустит следующие задачи, а старые не тронет ведь?
Eugene
@bloodrain777
Apr 20 2018 12:42
@projct1 Ну он же уже забрал их из очереди
projct1
@projct1
Apr 20 2018 12:48
@bloodrain777 ясн, ок, спс )
Eugene
@bloodrain777
Apr 20 2018 12:50
@projct1 пожалуйста
Anton Shelestov
@shelestovas
Apr 20 2018 13:08
@projct1 по поводу sendmail, т.е. получается теперь пучту стандартным mail не отправить? только smtp?
projct1
@projct1
Apr 20 2018 13:14
@shelestovas я не помню где это читал, вот тут глянь https://stackoverflow.com/questions/47666172/laravel-5-5-mail-not-working-with-mail-driver
@bloodrain777 кстати ты в мускуле норм разбираешься?
Eugene
@bloodrain777
Apr 20 2018 13:16
@projct1 спрашивай
projct1
@projct1
Apr 20 2018 13:16

@bloodrain777
есть основная таблица bars: id, closest_metro_id, closest_distance где указано ближайшее метро и расстояние до него
есть пивотная таблица bar_metros: bar_id, distance, metro_id, в которой для каждого бара есть несколько остальных метро рядом (но не ближе основного метро) и расстояние до них
надо составить запрос, который вычислит где ближайшее метро дальше остальных метро, то есть где closest_distance (ближайшее расстояние) больше чем distance
и вернуть metro_id самого ближайшего по факту

следовательно я делаю так, всё просто:

select bars.id, min(bm.distance) as real_closest_distance, bm.metro_id as real_closest_metro
from bars join bar_metros as bm on bars.id = bm.bar_id
where bm.distance < bars.closest_distance
group by bm.bar_id
having real_closest_distance < bars.closest_distance

но проблема в том, что в поле real_closest_metro попадает неверная айдишка метро, так как реальных ближайших метро может быть несколько

как бы bm.metro_id нужен только тот, где bm.distance < bars.closest_distance
Andrey Kushnarev
@andku83
Apr 20 2018 13:24
получить без min, отсортировать по real_closest_distance и внешним запросом сгруппировать
Eugene
@bloodrain777
Apr 20 2018 13:24
1
JhaoDa
@jhaoda
Apr 20 2018 13:29
@bloodrain777 ты может, не в курсе, но чувак @projct1 не читает документацию, не думает и не никак не учится, а лишь механически заучивает, хотя тусуется тут уже не первый год. Вся помощь ему полезна примерно так же, реанимация говяжьему стейку.
projct1
@projct1
Apr 20 2018 13:29
@jhaoda это не так )
Eugene
@bloodrain777
Apr 20 2018 13:30
@jhaoda а да? :D Теперь вкурсе
projct1
@projct1
Apr 20 2018 13:30
характер вопросов может быть разный
JhaoDa
@jhaoda
Apr 20 2018 13:30
@projct1 о да, вопрос про очереди офигенно «разный»
projct1
@projct1
Apr 20 2018 13:31
@jhaoda я с очередями тока щас начал работать если что) подводит тебя память чист)
JhaoDa
@jhaoda
Apr 20 2018 13:31
@projct1 это тебя она подводит, ты забываешь документацию читать
projct1
@projct1
Apr 20 2018 13:34
@andku83 как понять внешним запросом сгруппировать?
Andrey Kushnarev
@andku83
Apr 20 2018 13:40
SELECT ... FROM (твой селект без группировки) GROUP BY id HAVING ...
projct1
@projct1
Apr 20 2018 13:54
@andku83 ок спс, попробую)
@andku83 без подзапросов никак?
Andrey Kushnarev
@andku83
Apr 20 2018 13:56
возможно и получится если min(bm.distance) будет работать внутри where
projct1
@projct1
Apr 20 2018 14:05
@andku83 не, так нельзя, агрегатные функции тока в having можно юзать
Andrey Kushnarev
@andku83
Apr 20 2018 14:36
ну так попробуй min перенести в having, а в телексе сове поле выводи
Andrey
@AndrewZoh
Apr 20 2018 17:39
всем привет, никто не знает можно юзать каст json’a в массив и мутаторы одновременно?