Пути решения:
1) Первоначально в таблице blok_info оставить не более одной блокировки у каждого аккаунта, я оставлял самую позднюю
2) Исправить в таблице accounts типы блокировок у пользователей при выключенном биллинге:
1808 на 1792
784 на 768
272 на 256
+ вам возможно еще какие типы прийдется изменить, так как у меня принципиально не стоит в настройках карточки пользователя галочки ПАП и/или ППТП
3) Проверить нет ли расхождений между отсутствем записи о блокировки в accounts и наличием записей в block_info и наоборот наличием записи о блокировке в accounts и отсутствием записей в block_info
Код: Выделить всё
SELECT ac.*
FROM UTM5.blocks_info as bi, UTM5.accounts as ac
WHERE bi.account_id = ac.id
AND ac.is_blocked = 0
AND bi.is_deleted = '0'
AND ac.is_deleted = '0'
GROUP BY bi.account_id
Код: Выделить всё
SELECT ac.*
FROM UTM5.accounts as ac
LEFT JOIN UTM5.blocks_info as bi ON (bi.account_id = ac.id AND bi.is_deleted = '0')
WHERE ac.is_blocked <> 0
AND bi.id IS NULL
AND ac.is_deleted = '0'
Код: Выделить всё
SELECT *
FROM accounts as ac, blocks_info as bi
WHERE ac.is_blocked = 256
AND ac.id = bi.account_id
AND bi.block_type = 2
AND (bi.unabon <> 0 OR bi.unprepay <> 0)
AND bi.is_deleted = '0'
AND ac.is_deleted = '0'
Код: Выделить всё
SELECT *
FROM accounts as ac, blocks_info as bi
WHERE ac.is_blocked = 768
AND ac.id = bi.account_id
AND bi.block_type = 2
AND (bi.unabon <> 1 OR bi.unprepay <> 0)
AND bi.is_deleted = '0'
AND ac.is_deleted = '0'
Код: Выделить всё
SELECT *
FROM accounts as ac, blocks_info as bi
WHERE ac.is_blocked = 1792
AND ac.id = bi.account_id
AND bi.block_type = 2
AND (bi.unabon <> 1 OR bi.unprepay <> 1)
AND bi.is_deleted = '0'
AND ac.is_deleted = '0'
Код: Выделить всё
SELECT COUNT( * ) AS `Строки` , `is_blocked`
FROM `accounts`
WHERE `is_deleted` =0
GROUP BY `is_blocked`
ORDER BY `is_blocked` ;
Код: Выделить всё
SELECT COUNT( * ) AS `Строки` , `account_id`
FROM `blocks_info`
WHERE `is_deleted` =0
GROUP BY `account_id`
ORDER BY `account_id` ;