2014-12-02 5 views
0

테이블 B에 저장된 값 'x'을 사용하여 테이블 A에서 결과 세트를 얻는 mysql 쿼리를 만들었습니다. 지금 'x'가 필요할 때마다 다시 리셉션해야합니다. 6 번.복잡한 mysql 문에서 다중 SELECT

SELECT * FROM A WHERE a = (SELECT x FROM B ...) AND b = (SELECT x FROM B ...)-5 AND c = (SELECT x FROM B ...)+7 

내 SQL 문의 평가 기간 동안 그 값을 'x'를 저장할 수있는 방법이 있나요 :

는 내 쿼리의

단순화 된 버전은 다음과 같이 보이는? 그렇지 않으면 2 개의 쿼리를 대신 사용하는 것이 좋습니다 (처음에는 'x'를 얻고 두 번째 것은 'x'와 함께 사용).

당신이 내 문 중 하나를보고 싶다면, 여기에 예입니다

"(SELECT * FROM map WHERE x BETWEEN :x-:sight and :x+:sight AND y BETWEEN :y-:sight+:map_max_y and :map_max_y) /*1.part*/ 

    UNION 
    (SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :y-:sight+:map_max_y and :map_max_y ORDER BY y LIMIT 225) /*2.part*/ 

    UNION 
    (SELECT * FROM map WHERE x BETWEEN :x-:sight and :map_max_x AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*3.part*/ 

    UNION 
    (SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*4.part*/"; 

'X', 'Y', '시력'모든 DB에 저장되고 내 눈은 다시로드 상처 그들은 여러 번 (이것은 DB에서 아직로드하지 않는 오래된 버전입니다). 그리고 2 쿼리를 만드는 것은 나쁜 습관이라고 생각합니다.

는 사람 :

+0

Mysql에는 변수가 있습니다 (참조 : http://dev.mysql.com/doc/refman/5.0/en/user-variables.html). 이게 당신이 직접 질문에 대답하는 데 도움이 될 것 같습니까? – bwoebi

+0

'select @x_from_b : = x from b'? –

+0

고마워요, 제가 그걸 읽을 것입니다. 내가 MySQL 레슨을 놓친 것 같아 :) # –

답변

0

MySQL의 최적화는 중복 부속을 감지하고 한 번만 수행 할 수 있어야합니다, 사전에 감사합니다. 그냥 외부에서 변수를 사용하지 않는 SELECT와 실제로 동일한 선택인지 확인하고, EXPLAIN을 사용하여이를 확인합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 최적화가 중요하기 때문에 이미 기분이 좋아집니다. 다음 단계는 가독성을 향상시키는 것입니다. :) 그러나 이제는 어떻게 생각합니까? –

+0

가독성은 변수에 subselect를 입력 한 다음이 변수 (간단한 문자열 연결,이 수준에서 관련된 SQL이 없음)를 사용하여 outter select를 작성하여 쉽게 향상시킬 수 있습니다. –

+0

하지만 2 문장 만 사용하면 되겠습니까? –