Результат SQL возвращает полные строки вместо указанных

В принципе, у меня есть этот запрос

SELECT p.*, total, active_total
FROM proxies p
LEFT JOIN 
 (SELECT proxy_id, COUNT(*) as total 
 FROM creator_log 
 GROUP BY proxy_id) p2
 ON p.proxy_id = p2.proxy_id
JOIN 
 (SELECT proxy_id, COUNT(*) as active_total 
 FROM accounts
 WHERE status = 1) p3
 ON p.proxy_id = p3.proxy_id
WHERE 
 p.proxy_status = '1'
ORDER BY 
 p2.proxy_id DESC
LIMIT 1

Значение для active_total возвращает общее количество строк в моей таблице accounts Оно должно найти учетные записи, у которых proxy_id возвращен из результата LEFT JOIN,

Любые идеи, почему это странно?

1 ответ

Предположим, что таблица ваших учетных записей имеет следующие записи

proxy_id | field1 
 1 some_value 
 2 some_value 
 3 some_value 
 4 some_value

И запрос

SELECT proxy_id, COUNT(*) as active_total 
FROM accounts
WHERE status = 1

результат

proxy_id | active_total 
 1 4

Поэтому, когда вы присоединитесь, ваш ожидаемый результат не будет получен. Это приводит только к общим записям

Попробуй это

SELECT p.*, total, active_total
FROM proxies p
LEFT JOIN 
 (SELECT proxy_id, COUNT(*) as total 
 FROM creator_log 
 GROUP BY proxy_id) p2
 ON p.proxy_id = p2.proxy_id
JOIN 
 (SELECT proxy_id, COUNT(proxy_id) as active_total 
 FROM accounts
 WHERE status = 1
 GROUP BY proxy_id ) p3
 ON p.proxy_id = p3.proxy_id
WHERE 
 p.proxy_status = '1'
ORDER BY 
 p2.proxy_id DESC
LIMIT 1

licensed under cc by-sa 3.0 with attribution.