문제
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
위의 스크립트는 중복 데이터 행을 제공하지 않고
- 소스 T1 표로 모든 공통 데이터 Bteween T1 및 T2.
- T2 행 소스는 T1 테이블로 소스입니다.
- T1 행 소스는 T2 테이블로 소스입니다.
T2 테이블의 공통 데이터를 원한다면 플립 왼쪽 조인