SELECT
service_links.service_id
FROM service_links
WHERE service_links.is_deleted=0 AND
service_links.account_id=
(SELECT
service_links.account_id
FROM
service_links
INNER JOIN iptraffic_service_links ON iptraffic_service_links.id = service_links.id
INNER JOIN ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id
WHERE
ip_groups.is_deleted = 0 AND
iptraffic_service_links.is_deleted = 0 AND
service_links.is_deleted = 0 AND
INET_NTOA(ip_groups.ip & 4294967295) = '10.0.0.25')
Может кто ткнет меня в более изящную реализацию?
Нужно выбрать все периодические (в том числе и не включенные в тарифы) услуги навешанные на пользователя по IP...
Как раз выполняется очень медленно Вложенные запросы, плюс джоины - худшее что можно придумать.
Этим запросом буду авторизовывать клиентов на сервере middleware, запросов ожидается по десятку в секунду.
Структура базы нетапа вставляет не по детски
Наверное разобью на два отдельных запроса.
SELECT
a.service_id
FROM
ip_groups, iptraffic_service_links, service_links b, service_links a
WHERE
a.is_deleted=0 AND
b.is_deleted = 0 AND
ip_groups.is_deleted = 0 AND
a.account_id=b.account_id AND
iptraffic_service_links.id = b.id AND
ip_groups.ip_group_id = iptraffic_service_links.ip_group_id AND
iptraffic_service_links.is_deleted = 0 AND
INET_NTOA(ip_groups.ip & 0xFFFFFFFF) = '1.2.3.4';