사용자 목록을 수행하고 각 필드에서 수행 한 연락처 목록을 한 필드에서 연락하는 항목 유형별로 그룹화합니다. 이런 식으로 뭔가 :하위 쿼리의 상위 쿼리 테이블 참조
user_id, user_name, user_contact_views
100, john, 'a=21,b=22,c=3'
101, mary, 'a=53'
102, jack, 'b=13,c=5'
나는이 쿼리가 거의
SELECT
u.id user_id,
u.name user_name,
(select group_concat(type_id_n_contacts)
from (select CONCAT(item_type_id, '=', count(*)) type_id_n_contacts
from item_contact ic
where ic.user_id = u.id
group by item_type_id) sq_type_id_n_contacts
) as user_contact_views
, ... -- Lots of fields
FROM user u
INNER JOIN -- Other tables, field, where and so on ignored
WHERE ...
ORDER BY ...
LIMIT ...;
작동하지만
Error Code: 1054. Unknown column 'u.id' in 'where clause'
를 얻을 내가 중첩 된 쿼리에서 u.id 사용할 수 없습니다 내가 너희 경우 감사하겠습니다있다 사람들은 그것을 해결하기 위해 어떤 작업 arround 알아요. MySQL 변수는 어떻습니까? u.id의 값을 subsubquey의 변수로 가져 와서 ic.user_id = @user_id를 사용하는 방법?
중요 사항 : 필자는 필드 섹션에서 하위 쿼리를 사용해야합니다. count 문자열과 관련된 모든 미리 계산 된 users_id를 사용하여 JOIN에 임시 테이블을 작성하여 쿼리를 작동시킬 수 있습니다 (Giulio 응답 참조). 그러나 사용자의 전체 테이블을 사용하고 나중에 색인을 생성하지 않기 위해 너무 많은 필드가 있습니다. 그래서 MySQL은 쿼리 실행의 마지막 단계에서 WHERE 및 LIMIT에 의해 이미 필터링되고 제한된 user_ids로 하위 쿼리를 수행하기를 원합니다. 나는 나 자신을 설명하기를 바란다.
감사합니다.
당신이 완전한 쿼리 및 조인에 대한 정보를 제공 할 수 있습니다, 나는이 하위 쿼리를 사용하지 않고 할 수 있다고 생각합니다. – CrashOverload