source

사용자 정의 변수를 사용하여 두 번째 데이터베이스에 동적으로 이름을 지정하여 해당 두 번째 데이터베이스와 함께 조인 테이블에 이름을 지정합니다.

nicesource 2022. 11. 24. 20:43
반응형

사용자 정의 변수를 사용하여 두 번째 데이터베이스에 동적으로 이름을 지정하여 해당 두 번째 데이터베이스와 함께 조인 테이블에 이름을 지정합니다.

할 필요가 있다JOIN테스트 목적으로만 이미 정적으로 실행한 두 개의 다른 데이터베이스입니다.

  1. 첫 번째 데이터베이스는 연결 자체에 이미 정의되어 있습니다.
  2. 두 번째 데이터베이스는 사용자 정의 변수에 먼저 정의해야 하는 첫 번째 데이터베이스 내의 정보에서 동적으로 파생되어야 합니다.단순하게 하기 위해 두 번째 데이터베이스 이름은 다음과 같습니다.example2.
  3. 두 번째 데이터베이스 이름을 정적으로 정의하면 기능하고 모든 데이터베이스 이름이JOINed 데이터는 정상적으로 풀립니다만, 만약 라이브(또는 「실가동」) 서버상에서 이것을 실시하면, 그 2개의 쿼리 사이에 PHP 코드가 있는 같은 접속으로 2개의 다른 쿼리를 실행할 필요가 있습니다.
  4. 두 번째 데이터베이스 이름을 정의하려면 두 번째 쿼리를 실행해야 합니다.중요한 것은 단일 쿼리로 SQL 서버에 여러 번 연결하지 않는 것입니다(사용자 정의 변수를 쿼리로 설정하지 않는 경우).

다음은 나에게 도움이 되는 것을 보여주는 정적 데모입니다.

SELECT * FROM example1 AS e1 
INNER JOIN example2.accounts AS e2a ON (e2a.id = e1.accounts_id);

그러나 다음 기능은 작동하지 않습니다.

SET @db = 'example2';
SELECT * FROM example1 AS e1 
INNER JOIN @db.accounts AS e2a ON (e2a.id = e1.accounts_id);

사용자 정의 변수를 설정하여 사용하여 두 번째 데이터베이스의 이름을 동적으로 정의하고 이를 사용하여 동적으로JOIN두 데이터베이스 사이에 있는 테이블이 있나요?

  • 모든 데이터가 올바르게 저장/포맷되어 있다.
  • 사용자 정의 변수는 이미 동작하고 있습니다.데이터베이스 간 JOIN에서 구현하려면 도움이 필요합니다.
  • 이는 PHP에 변수 변수가 있다는 사실과 관련이 있습니다.

MySQL에서는 다음과 같은 준비 스테이트먼트를 사용할 수 있습니다.

SET @db = 'example2';
SET @sql = CONCAT('SELECT * FROM example1 AS e1 
                   INNER JOIN ', @db , 
                   '.accounts AS e2a ON e2a.id = e1.accounts_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

첫 번째 응답에서는 클라이언트와 서버 간의 불필요한 라운드 트립을 피하기 위해 다음 2개의 라이너를 사용합니다.

SET @db = 'example2';
EXECUTE IMMEDIATE CONCAT('SELECT * FROM example1 AS e1 INNER JOIN ', @db , '.accounts AS e2a ON e2a.id = e1.accounts_id');

언급URL : https://stackoverflow.com/questions/63468237/use-a-user-defined-variable-to-dynamically-name-second-database-to-join-tables-w

반응형