2016-08-17 6 views
1

는 heres는 가상의 시나리오, 내 문제를 설명하기 위해 쿼리 : MySQL은 여러 하위 쿼리의 사용 결과는

(
    select user_id, stat 
    from stats1 
    where user_id in (select id from users where selected = 1) 
) 

union 

(
    select user_id, stat 
    from stats2 
    where user_id in (select id from users where selected = 1) 
) 
union 
(
    select user_id, stat 
    from stats3 
    where user_id in (select id from users where selected = 1) 
) 
# and so on ... 

보는 방법 '에서'사용되는 여러 번에서 쿼리. 이 쿼리 adn의 결과를 저장 한 다음 사용하고 싶습니다. 다른 모든 쿼리에서 분명히 이것은 PHP에서 해당 쿼리를 실행 한 다음 값을 전달하면 쉽게 가능합니다. 그러나 순전히 MySQL에서 가능합니까? 당신이 그것을 필요로 할 때

+0

[MySQL보기] (http://dev.mysql.com/doc/refman/5.7/en/view-syntax.html)를 사용할 수 있다고 생각합니다. 첫 번째 요청 후 엔진이 요청 중에 캐시를 사용한다고 가정합니다. –

+0

mysql 변수에 해당 쿼리의 결과를 저장하고 나중에 참조 할 수 있습니다. – 1000111

+0

이것은 일반적으로 mysql에없는 CTE와 함께 수행되며 mysql은 이러한 종류의 하위 쿼리에서 매우 느립니다. 왜 그것을 필요로합니까? 몇 가지 대신 하나의 테이블로만 통계를 작성하면 안됩니까? – e4c5

답변

0

당신은 당신의 선택 사용자

CREATE VIEW selectedUsers AS SELECT id FROM users WHERE selected = 1; 

을위한 영구적 인 뷰를 만들 수있는 것은 그런 다음 구문은 경우

(
    SELECT user_id, stat 
    FROM stats1 
    WHERE user_id IN (SELECT * FROM selectedUsers) 
) 

UNION 

(
    SELECT user_id, stat 
    from stats2 
    WHERE user_id IN (SELECT * FROM selectedUsers) 
) 
UNION 
(
    SELECT user_id, stat 
    FROM stats3 
    WHERE user_id IN (SELECT * FROM selectedUsers) 
) 
# and so on ... 

쉽고 가벼운 테이블에서 데이터 사용자 요청 중에 변경되지 않으면 데이터베이스 엔진은보기가 필요할 때마다 캐시를 ​​사용해야합니다.

여기에 있습니다. MySQL Views documentation

+0

은 user_id가 아니어야합니다 (select * from selectedUsers)? – e4c5

+0

@ e4c5 네가 맞아! 죄송합니다! 감사합니다 –

+0

@ Ahmed-Anas 좋습니다. –

관련 문제