2011-08-29 2 views
2

나는 하나의 SELECTs의 무리를 통합하려고합니다.뭔가를 선택하십시오 여러 테이블의 열 IN 뭔가를 조인

나는 다음과 유사하게 여러 테이블이 있습니다

테이블 : A1

+---+----+----+----+----+ 
|id | I1 | I2 | I3 | I4 | 
+---+----+----+----+----+ 
| 1 | 5 | 6 | 1 | 3 | 
+---+----+----+----+----+ 

테이블 : A2

+---+----+----+----+ 
|id | I1 | I2 | I3 | 
+---+----+----+----+ 
| 1 | 3 | 10 | 5 | 
+---+----+----+----+ 

그리고 다음과 같습니다 1 표 :

테이블 : 표준

+---+---------+ 
|id | Name | 
+---+---------+ 
| 1 | 'one' | 
| 2 | 'two' | 
| 3 | 'three' | 
| 4 | 'four' | 
| 5 | 'five' | 
| 6 | 'six' | 
| 7 | 'seven' | 
| 8 | 'eight' | 
| 9 | 'nine' | 
|10 | 'ten' | 
+---+---------+ 

PHP 코드

<?php 
    while(/*"A" tables*/){ 
     $noi = // number of columns in this A table 
     $id = // id of this A table 
     $columns = ""; 
     for ($i=1; $i<=$noi; $i++){ 
      $columns = $columns . "A" . $id . ".I" . $i . ", "; 
     } 
     $columns = rtrim($columns, ", "); 

     $sql = "SELECT s.* FROM A" . $id . " 
      INNER JOIN Standards AS s 
      ON s.id IN (" . $columns . ") 
      WHERE A" . $id . ".id=1 
      ORDER BY s.id ASC"; 

     $result = mysql_query($sql); 
    } 
?> 

나는 내가 루프에 대한 모든를 생성하기 위해 실행할 수 있습니다 생각 1에이 SELECTS을 모두 결합하고 싶습니다 테이블의 이름은 있지만, 다른 JOIN ON ... IN (...)과 조인하는 방법을 정확하게 알지 못했습니다. 내가 생성 할

결과는 다음과 같습니다

+---+---------+ 
|id | Name | 
+---+---------+ 
| 1 | 'one' | 
| 3 | 'three' | 
| 5 | 'five' | 
| 6 | 'six' | 
|10 | 'ten' | 
+---+---------+ 
+0

테이블을 피벗 할 수 있으면 (예 : 열을 행으로 바꿀 수 있다면) 더 쉬울 것입니다. AFAIK MySQL에는이 기능이 없습니다. – NullUserException

+0

그 문제는 A 테이블에서 ID # 1 뒤에 수백 개의 행이 있다는 것입니다. – abarrington

+0

나는 호기심이 많다. 왜 테이블은 이렇게 구조화되어 있습니까? 이런 종류의 문제가 발생하면 나쁜 DB 설계의 징후가 될 수 있습니다. – NullUserException

답변

0

이 솔루션에서 봐, 당신이 수행하는 방법의 기초 제공한다 : 한마디로

select-mysql-rows-but-rows-into-columns-and-column-into-rows

을, 2 개의 테이블과 UNION 데이터 세트의 행으로 각 행의 열 값을 선택한 다음 조회 테이블에 JOIN 할 수 있습니다. 그 결과는 당신이 묘사 한 것이어야합니다. (모든 I1, I2, I3 등의 열이 조회 테이블의 ID를 나타내는 것으로 가정합니다.)

+0

UNION이 나를 위해 일할 것이라고 생각합니다. 나 자신을 시도해 보지 않고서도 UNION에서 ORDER BY를 할 수 있다면 누구나 알 수 있습니까? – abarrington

+0

물론,이 같은'SELECT FROM 필드 1 대한 추가 정보를 원하시면이 게시물을 참조 할 수 있습니다 field1' –

+0

BY ORDER (표 1 UNION 표 2 FROM SELECT 필드 1 FROM 필드 1 선택) : http://stackoverflow.com/questions/ 213851/sql-query-by-in-union –

관련 문제