문제

3 개의 개별 테이블의 데이터를 사용하는 PHP에 RSS 피드를 구축하고 있습니다. 테이블은 모두 사이트의 다른 영역 내의 페이지를 나타냅니다. 내가 가진 문제는 XML 내에서 링크 필드를 만들려고하는 것입니다. 각 레코드가 어떤 테이블에서 왔는지 모르면 올바른 링크를 만들 수 없습니다.

이 문제를 해결할 수있는 방법이 있습니까? mysql_fetch_field를 사용해 보았지만 테이블의 빈 값을 반환했습니다.

$sql = "
SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3";

다른 필드가 포함되어 있지만 기본적으로 내가 사용하는 쿼리입니다.

모든 도움이 감사하겠습니다.

감사.

도움이 되었습니까?

해결책

충분히 쉬워야합니다.

$sql = "
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3";

다른 팁

다음과 같이 열 목록에 상수를 추가하십시오.

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3

다음과 같은 것을 얻을 수 있습니다.

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation

등등.

이를 통해 링크로의 변환을 더 쉽게 할 수있는 문자열 데이터 유형을 가질 수 있습니다 (특히 찾거나 변환하는 대신 페이지에 복사 해야하는 값을 사용하는 경우) as 절은 다른 열 (이름 별)처럼 참조 할 수 있습니다.

사용에 유의하십시오 union all - 테이블에서 중복 행이 없을 것이라고 확신하는 경우 아마 이 경우에도 다릅니다 table_name 각각의 가치와 나는 제목이 독특하다고 가정합니다), union all 낭비 된 분류 및 정지-복제 작업을 피할 수 있습니다. 사용 union 그 자체로는 불필요한 작업을 수행 할 수 있습니다.

중복 제거를 수행하려면 사용으로 되돌아보십시오. union.

일정한 베일이있는 더미 열을 추가하십시오. 예를 들어. 각 절에 대해 "Funky_Table '을 Source_table로 선택하고, funky_table의 제목"을 선택하십시오.

아래 쿼리는 더 잘 작동하며 위의 쿼리가 행을 두 번 렌더링하지 않으므로 더 나은 아이디어를 제공합니다.

SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN 
t1
ON t1.id=t2.id
WHERE t1.id=null

위의 스크립트는 중복 데이터 행을 제공하지 않고

  1. 소스 T1 표로 모든 공통 데이터 Bteween T1 및 T2.
  2. T2 행 소스는 T1 테이블로 소스입니다.
  3. T1 행 소스는 T2 테이블로 소스입니다.

T2 테이블의 공통 데이터를 원한다면 플립 왼쪽 조인

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top