두 테이블 모두에 데이터를 삽입하는 두 가지 MySQL 쿼리가 있습니다. 두 쿼리 간의두 개의 MySQL 쿼리를 UNION 또는 프로그래밍 방식으로 결합하십시오.
CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
)
SELECT `field1`, `field2`
WHERE `active` = 1
유일한 차이는 field1
및 field2
이 어떻게 결정되는지, 그리고 조건 절에 약간의 차이 : 모두 다음과 같은 형식을 가지고있다. 둘 다 최대 12K와 더 많은 기록을 실행합니다.
A. 실행 별도로 두 쿼리 :
if (mysql_query($query1)) {
return mysql_query($query2);
}
return false;
B. 또는 노동 조합과 함께 두 개의 쿼리를 결합, 한 번 실행
$query = 'SELECT `field1`, `field2` WHERE `active` = 1
UNION
SELECT DO_ONE(`field1`), DO_TWO(`field2`) WHERE `active` = 1
ORDER BY `field1`';
return mysql_query('CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
) ' . $query)
더 효율적 무슨 지금
,
한 쿼리의 데이터는 다른 데이터의 데이터가 없으면 쓸모가 없으므로 둘 다 성공해야합니다. DO_ONE
및 DO_TWO
은 일부 사양에 따라 필드 데이터를 변경하는 사용자 정의 MySQL 함수입니다.
은 적어도 표면적으로, 당신의 목표 테이블이 이미 존재하는 경우 쿼리의 이전 실행에서 당신이 얻을 것이다 것처럼 왼쪽 오버 찌꺼기를 보인다. 또한 자동 생성 된 기본 키가 있기 때문에 원하는만큼 테이블에 새 레코드를 계속 삽입 할 수 있습니다 (번호가 다 떨어지기 전에 디스크 공간이 부족할 것 같음). –
UNION 버전에서는 결과 집합에 중복 레코드가 없도록합니다. 별도의 쿼리 버전은 그렇지 않습니다. 음, 'id'열은 실제로 레코드가 모두 구별되지만 다른 열 (그러나 다른 id 값)에는 같은 데이터를 가진 반복 된 레코드가있을 수 있습니다. 아마도 UNION을 사용하는 것이 중요합니다. –