2010-05-19 4 views
0

두 개의 테이블이 있다고합시다. 하나는 항목 목록을 포함하고 다른 하나는 항목 그림을 포함합니다. 이 같은MySQL, 하나의 항목을 하나의 쿼리로 여러 항목에 결합하십시오.

뭔가 :

항목

+----+---------+ 
| id | name | 
+----+---------+ 
| 1 | oranges | 
| 2 | apples | 
+----+---------+ 

사진

+----+---------+ 
| id | item_id | 
+----+---------+ 
| 1 | 1  | 
| 2 | 2  | 
| 3 | 2  | 
+----+---------+ 

내 질문은 이것이다 : 그것은 Items에서 항목 2을 선택하는 하나의 쿼리에서 가능하다의 모든 행에 가입하십시오.item_id이 동일한 ID를 참조하는 테이블?

나는 내가 생각할 수있는 거의 모든 것을 시도했지만, 아무 것도 생각 나지 않을 것이라고 확신한다. 대답이 간단하다면 사과 드리지만, 지금 당장은 나를 피하고 있습니다.

편집

작동하지만, 정확히 나에게 내가 원하는 결과를 제공하지 않습니다 @Andomar. 내가 좀 더 명확해야 추측이 같은 유사한 결과를 얻을 것이 가능 요청 (난 후 무엇은 PHP 배열하지만 조직이다) :

$results = array(
    [0] => array(
     'id' => 1, 
     'name' => 'oranges', 
     'images' => array(
      [0] => ..., 
     ), 
    ), 
    [1] => array(
     'id' => 2, 
     'name' => 'apples', 
     'images' => array(
      [0] => ..., 
      [1] => ..., 
     ), 
    ), 
); 

답변

1
SELECT i.name, GROUP_CONCAT(p.id SEPARATOR ',') AS pictures 
FROM Items i 
LEFT JOIN Pictures p 
    ON p.item_id = i.id 
WHERE i.id = 2

GROUP_CONCAT없이이 각각 일치하는 사진에 대해 서로 다른 행을 반환 할 수 있습니다. Pictures 테이블의 결과를 그룹화하면 하나의 행을 결과로 얻을 수 있습니다.

+0

질문을 편집했지만 검색어가 내가 찾던 내용과 매우 비슷하게 보입니다. 이것은 원래 질문의 일부는 아니지만,이'(p.name + "."+ p.extension)'과 같은'GROUP_CONCAT' 문 안에 뭔가를 할 수있는 방법이 있는지 궁금 해서요. 'img1.png, img2.png'와 같은 결과가 나옵니까? – bschaeffer

+1

'CONCAT'을 사용할 수 있습니다. 예 :'GROUP_CONCAT (CONCAT ('img ', p.id,'.png ') SEPARATOR', ')'. – Alec

2

A가 트릭을해야 가입 :

select * 
from Items i 
left join Pictures p on p.item_id = i.id 
where i.id = 2 
+0

빠른 답장을 보내 주셔서 감사합니다. 그것은 훌륭하게 작동합니다 ...하지만 나는 원하는 결과가 무엇인지에 대해 더 분명히해야만했을 것 같습니다. 나는 질문을 편집했고 당신이 가지고있는 다른 의견을 정말로 고맙게 생각할 것입니다. – bschaeffer

관련 문제