Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скрипт подсчета количества активных клиентов у дилеров. / 11 сообщений из 11, страница 1 из 1
01.10.2015, 18:58:29
    #39066444
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
Даже не знаю с чего начать. Главная проблема в том что дилеры и пользователи находятся в одной и той же таблице "users". Клиента от дилера отличает то что у клиента в поле "dealer" стоит логин дилера. А чтоб определить активный ли клиент нужно в таблице "user_packet_groups" посмотреть если ли у него запись(их может быть несколько а может ни одной), где time_till>time().

Подскажите как можно такое сделать? С чего начать? РНР скрипт будет запускаться по крону, считать количество клиентов и добавлять их дилеру в поле "client" в таблице "users"

Вот структура таблиц:
users

login - dealer - client
deale1 - -
test1 - deale1 -
test2 - deale1 -
test3 - deale2 -

user_packet_groups

login - time_till
test1 - 1436561448
test2 - 1434541448
test3 - 1494561448
...
Рейтинг: 0 / 0
01.10.2015, 19:04:45
    #39066445
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
и нафига тут вообще пхп?
Код: sql
1.
2.
3.
4.
5.
6.
update users u
set client=(
 select count(distinct login) from users u1 
 join user_packet_groups upg on u1.login=upg.login
 where u1.dealer=u.login)
where dealer is not null
...
Рейтинг: 0 / 0
01.10.2015, 19:10:08
    #39066448
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
tanglir, Спасибо за такой быстрый ответ, но вы не учли что user_packet_groups.time_till должно быть больше time() . В SQL есть сменная что показівает текущее время?
...
Рейтинг: 0 / 0
01.10.2015, 19:16:06
    #39066451
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
vasyakrn,

now()
...
Рейтинг: 0 / 0
01.10.2015, 19:22:30
    #39066454
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
tanglir,

Я просто не очень знаю SQL и на свякий случай переспрошу. А вы учли что для одного клиента в таблице user_packet_groups может быть много записей одни там несколько где time_till>time(). и могут быть пару где time_till<time() .В таком случае будет ли считаться пользователь за одного клиента?
...
Рейтинг: 0 / 0
02.10.2015, 05:04:26
    #39066590
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
Будет. Читайте про distinct.
...
Рейтинг: 0 / 0
02.10.2015, 11:47:11
    #39066900
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
tanglirБудет. Читайте про distinct.
Когда віполняю скрипт у меня вот такая ошибка #1093 - You can't specify target table 'u' for update in FROM clause
...
Рейтинг: 0 / 0
02.10.2015, 12:24:20
    #39066967
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
Долбаный тупой мускль... ну тогда так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update users u
left join (
 select u1.dealer,count(distinct upg.login) cnt
 from users u1 
 join user_packet_groups upg on u1.login=upg.login
 where условие_на_время
 group by 1
) t0 on u.login=t0.dealer
set u.client=coalesce(t0.cnt,0)
where u.dealer is null
...
Рейтинг: 0 / 0
02.10.2015, 13:19:08
    #39067069
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
tanglirДолбаный тупой мускль... ну тогда так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update users u
left join (
 select u1.dealer,count(distinct upg.login) cnt
 from users u1 
 join user_packet_groups upg on u1.login=upg.login
 where условие_на_время
 group by 1
) t0 on u.login=t0.dealer
set u.client=coalesce(t0.cnt,0)
where u.dealer is null



Написал Вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update users u
left join (
 select u1.dealer,count(distinct upg.login) cnt
 from users u1 
 join user_packet_groups upg on u1.login=upg.login
 where upg.time_till>1443780809
 group by 1
) t0 on u.login=t0.dealer
set u.client=coalesce(t0.cnt,0)
where u.dealer is null



результат "Затронуто 0 строк. ( запрос занял 0.0668 сек. )"

Зарание спасибо
...
Рейтинг: 0 / 0
02.10.2015, 13:34:12
    #39067090
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
vasyakrnЗатронуто 0 строкНу не знаю... может, у вас в "пустых" полях не NULLы, а пустые строки?
...
Рейтинг: 0 / 0
02.10.2015, 14:04:47
    #39067132
vasyakrn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт подсчета количества активных клиентов у дилеров.
tanglirvasyakrnЗатронуто 0 строкНу не знаю... может, у вас в "пустых" полях не NULLы, а пустые строки?
Вы правы. Сделал where u.dealer='' и все заработало. Спасибо! Удачи Вам!!!!!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скрипт подсчета количества активных клиентов у дилеров. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]