2013-07-10 11 views
0

배열이 $arrResult입니다. 복잡한 JOIN SQL 쿼리에서이 배열을 받았습니다. 참고로 여기 배열을 인쇄하고 있습니다 : 당신이 볼 수 있듯이아래 주어진 시나리오에 대한 SQL 쿼리를 만드는 방법은 무엇입니까?

Array 
(
    [21e86b3ebf6a8af2a9fcf136c4f8e88a] => 1 
    [e7e95de96987cc7c89c1f0183110fb38] => 3 
    [42eaca88ae0079a77604d75d30846e46] => 1 
    [fc55acb1edc47d2dc339562db4c13729] => 1 
    [9f27643023a83addd5eed41c4aade840] => 3 
    [5810758e0ee945090506e02c35222f0e] => 3 
) 

는, 키 (즉 test_pack_id)는 배열에 차이가 있지만 값 (즉, test_pack_type_id) 반복 얻고있다. 일부 상황에서는 값이 고유 할 수 있습니다.

test_pack_id 필드가있는 test_packages이라는 데이터베이스 테이블이 있는데,이 필드는 해당 테이블의 기본 키이기도합니다. test_pack_id 필드는 이미 존재하는 다른 유사한 값과 함께 위 배열의 값 (즉, 위 배열의 키)을 포함합니다. 이 테이블은 상기 배열의 값이 포함 test_pack_type_id라는 다른 필드 갖는다 (등 ie1,3들을.)

을 이제 test_pack_id 위에서부터 test_pack_id 동일하지 여기서 I는이 테이블에서 레코드 만 인출 할 배열을 가지고 있지만 그 특정 test_pack_id와 동일한 test_pack_type_id을 가지고 있습니다.

또한 가져온 test_pack_ids는 test_pack_type_id으로 그룹화해야합니다. 원하는 결과를 얻기 위해 많은 트릭을 시도했지만 얻을 수는 없었습니다. 누구든지 원하는 결과를 얻을 수 있도록 도와 줄 수 있습니까?

다음과 같이 테이블 test_packages의 구조는 다음과 같습니다

test_pack_id  varchar(32) 
test_pack_name  varchar(255) 
test_pack_desc  text  
test_pack_type_id smallint(4) 
+2

테이블 구조와 SQL 문을 게시해야합니다. – jeroen

+0

@jeroen : 귀하의 제안에 감사드립니다. 이제 test_packages 테이블의 테이블 구조를 추가했습니다. – PHPLover

+0

출력 내용을 다음과 같이 추가하십시오. – matino

답변

0
SELECT DISTINCT test_pack_id, 
       test_pack_type_id, 
FROM test_packages 
WHERE test_pack_id not in ('21e86b3ebf6a8af2a9fcf136c4f8e88a', 'e7e95de96987cc7c89c1f0183110fb38', ...) 
GROUP BY test_pack_type_id 
ORDER BY test_pack_type_id ASC; 

희망이 내가 제대로 요구 사항을 이해 한 :) 여기

+0

: test_pack_type_id를 추출하지 않고 test_pack_ids의 값을 정적 형식으로 전달하기 때문에이 방법은 작동하지 않습니다. 그들은 동적으로 전달되어야합니다. – PHPLover

+0

네,하지만 PHP로 SQL 쿼리를 준비 할 수는 있습니다. 그의 예제에서 @ Saran과 같은 것이 나타났습니다. – xionutz2k

4

난 당신이 이미 주어진 배열 값을 추출했다고 가정입니다 데이터베이스의 질문에서

$data = Array 
     (
      [21e86b3ebf6a8af2a9fcf136c4f8e88a] => 1 
      [e7e95de96987cc7c89c1f0183110fb38] => 3 
      [42eaca88ae0079a77604d75d30846e46] => 1 
      [fc55acb1edc47d2dc339562db4c13729] => 1 
      [9f27643023a83addd5eed41c4aade840] => 3 
      [5810758e0ee945090506e02c35222f0e] => 3 
     ); 
$sep = ""; 
$pack_str = ""; 
$pack_type_arr = array(); 
foreach($data as $key=>$val) 
{ 
    $pack_str = $sep.$pack_str; 
    if(!in_array($val,$pack_type_arr)) 
     $pack_type_arr = $val; 
    $sep = ","; 
} 
$pack_type_str = implode(",",$pack_type_arr); 
$sql = "SELECT * 
      FROM test_packages 
      WHERE test_pack_id not in ($pack_str) 
      AND test_pack_type_id IN ($pack_type_str)    
      ORDER BY test_pack_type_id ASC"; 

//then execute the query and extract the resource in variable(say $query) 
while($row = mysql_fetch_assoc($query)) 
{ 
    $output[$row['test_pack_type_id']][] = $row['test_pack_id']; 
} 
//Thus $output gives you the key(test_pack_type_id) value(test_pack_id) association 

나는 이것이 약간의 hel 피.

관련 문제