2011-12-28 2 views
3

(또는 JSON 또는 whatelse) 사실이 테이블이 있습니다변환 결과는 배열에 가입

- Table games - 
ID 
Name 

- Table ean - 
ID 
ID_games 
EAN 

을 그리고이 요청이 :

SELECT games.*, ean.EAN 
FROM games 
LEFT JOIN ean ON (games.ID = ean.ID_games) 

이 결과는 같을 것이다 이 :

| 1 | Half Life | 358958595 | 
| 1 | Half Life | 589584859 | 
| 2 | Half Life 2 | 385953684 | 
| 2 | Half Life 2 | 585100335 | 
etc. 

내 요청을하고 그것을 PHP에서 사용하면 많은 결과가 거의 같은 것은 유용하지 않습니다.

SELECT games.*, ConvertToArray(ean) AS ean_array 
FROM games 
LEFT JOIN ean ON (games.ID = ean.ID_games) 

그리고이 같은 결과를 얻을 : 나는 같은 것을 할 싶습니다

| 1 | Half Life | (358958595,589584859) | 
| 2 | Half Life 2 | (385953684,585100335) | 
etc. 

그것은 MySQL의에 해당 할 수 있습니까? UDF가 없다면? 그리고 UDF로?

는 케빈

답변

3

당신은 GROUP_CONCAT를 사용하여 객체 마십시오, 감사?

SELECT  games.*, GROUP_CONCAT(ean.EAN) AS ean_list, 
FROM   games 
    LEFT JOIN ean 
    ON   games.ID = ean.ID_games 
GROUP BY  games.ID, games.name 

이 결과 : 이것은 당신에게 좋은 구분 된 목록 (내에서 구분 기호를하지 않아도됩니다 ean 값을 가정) 줄 것이다 또한

| 1 | Half Life | 358958595,589584859 | 
| 2 | Half Life 2 | 385953684,585100335 | 

을, 여기에 내가 적용이 논리를 발견 qeustion입니다 : mySql - creating a join using a list of comma separated values

+0

:

귀하의 질의는 같을 것이다. 고맙습니다 ! – Kevin

1

보십시오이 하나

SELECT g.id, GROUP_CONCAT(CAST(e.ean AS CHAR) SEPARATOR ', ') 
FROM games g 
LEFT JOIN ean e ON g.id = e.id_games 
GROUP BY g.id; 
2

GROUP_CONCAT()을 참조하십시오.

예시는 here입니다. 내가 찾던 정확히 무엇을

SELECT games.*, GROUP_CONCAT(DISTINCT ean) AS ean_array 
FROM games 
LEFT JOIN ean ON (games.ID = ean.ID_games) 
GROUP BY games.ID