2014-02-18 6 views
0

내가 원하는 것을 찾기 위해 어떤 영어 단어가 필요한지 여기에서 묻습니다. 여러 개의 쿼리를 사용하여 for 및 foreach 루프를 사용하여이 문제를 해결할 수 있지만보다 지능적인 방법이 있다면 왜해야합니까?Mysql 여러 테이블에서 행을 결합하십시오.

처럼 내 쿼리는 지금 보이는 : 이미지를 비디오로

|----id----|---product----|----videoid-------| 
|----4-----|---1----------|-----youtubeid----| 
|----4-----|---1----------|--secondyoutubeid-| 

과 같은 :

|---id---|---name----|---desc---|---price---|---active----| 
|---1----|---somet---|---dsa----|---456-----|---1/0-------| 
|---2----|---somet2--|---ddsasa-|---44556---|---1/0-------| 

제품 비디오 : 내 테이블

제품과 같이

SELECT p.* , pi.path, pv.videoid 
FROM products p 
JOIN productimage pi ON (p.id = pi.product) 
JOIN productvideo pv ON (p.id = pv.product) 
WHERE p.id=:id 

, 그리고 나는 mak하고 싶다. 파일에 대한 동일한 전자는이 같은

결과는

//result of $stmt->fetchAll(PDO::FETCH_ASSOC); 
$arr = array(
    0 => array(
     "id" => "1", 
     "name" => "hello world", 
     "category" => "3", 
     "videoid" => array("oneyoutubeid", "secondid", "thirdid"), //videos that is for this product 
     "path" => array("imagepathofproduct", "secondimageofproduct"), 
     "active" => "1" 
    ), 
    1 => array(
     "id" => "2", 
     "name" => "hello world product 2", 
     "category" => "4", 
     "videoid" => array("oneyoutubeid", "secondid", "thirdid"), //videos that is for this product 
     "path" => array("imagepathofproduct", "secondimageofproduct"), 
     "active" => "1" 
    ), 
); 
to use it like this: return $stmt->fetchAll(PDO::FETCH_ASSOC); and start foreach for displaying data. 

감사합니다 매우

+0

번호 간단한 가져-결과-에 배열 당신이 원하는 것을 할 수없는 사람에게 helpt합니다

SELECT p.* , GROUP_CONCAT(DISTINCT path ORDER BY pi.id) AS images, GROUP_CONCAT(DISTINCT videoid ORDER BY pi.id) AS videos FROM products p JOIN productimage pi ON (p.id = pi.product) JOIN productvideo pv ON (p.id = pv.product) WHERE p.id=1 

홈. 구조를 구축하려면 복잡한 페치 루프가 더 필요합니다. –

답변

0

CONCAT으로 해결하고 난 배열에 그것을 폭발을 쉽게 만들 수 있습니다. 하지만 여전히 더 스마트 한 솔루션을 기다리고 있습니다.

솔루션 :이

관련 문제