SQL JOIN语句 - 导出前生成数据

时间:2013-04-09 02:58:40

标签: php mysql sql

我尝试在导出到csv格式之前生成数据但是我无法获得正确的数据。

Table : products
products_id | products_image
    2       |    a.jpg
  1786      |    b.jpg

Table : product_description
products_id | products_description  | language_id
     2      |   BM description      |      6
   1786     |   BM description      |      6
   1786     |   CN description      |      4
   1786     |   EN description      |      1

我尝试输出这样的输出:

products_id | products_image | p_description_6 | p_description_4 | p_description_1 |
    2       |     a.jpg      | BM description  |                 |                 |
    1786    |     b.jpg      | BM description  | CN description  | EN description  |

我当前的查询如下,但此查询无法在同一行中生成product_description:

$select = "SELECT p.*, pd.* FROM products p LEFT JOIN product_description pd on p.products_id=pd.products_id group by p.products_id";

2 个答案:

答案 0 :(得分:1)

尝试类似的事情,

SELECT
    P.products_id,
    p.products_image,
    MAX(CASE WHEN language_id = 6 THEN products_description  END) AS p_description_6,
    MAX(CASE WHEN language_id = 4 THEN products_description  END) AS p_description_4,
    MAX(CASE WHEN language_id = 1 THEN products_description  END) AS p_description_1

FROM 
    products P 

INNER JOIN 
    product_description D ON P.products_id = D.products_id

GROUP BY 
    P.products_id,
    p.products_image

SQL Fiddle

答案 1 :(得分:0)

您可以使用GROUP_CONCAT在同一行生成product_description:

select 
  a.products_id,
  a.products_image,
  group_concat(b.products_description) as descriptions,
  group_concat(b.language_id) as lang_ids
from products a 
left join 
  product_description b on b.products_id = a.products_id
group by a.products_id

SQL Fiddle Demo