2017-08-16 57 views
-1
products(prod_id, prod_name,...) 
    attribute_key(attr_key_id, attr_name) 
    attributes_values(attr_val_id, attr_key_id, value) 
    product_attr_values(id,product_id,attr_val_id) 

我已将MYSQL结果定义为数组定义。问题是我必须 连接相同的属性与不同的值与 逗号(;)相同的产品。但是我可以得到结果而不用连接它。帮助赞赏。mysql将结果转换为使用php的数据透视表

$shop = Array 
(
"0" => Array 
    (
     "id" => 9, 
     "prodname" => 'Ramkinkar Baij', 
     "attribute_name" => 'Author', 
     "value" => 'sabsyasachi das' 
    ), 

"1" => Array 
    (
     "id" => 10, 
     "prodname" => 'Ramkinkar Baij', 
     "attribute_name" => 'Author', 
     "value" => 'Ela Datta' 
    ), 

"2" => Array 
    (
     "id" => 11, 
     "prodname" => 'Ramkinkar Baij', 
     "attribute_name" => 'Editor', 
     "value" => 'Sathi Basu' 
    ), 

"3" => Array 
    (
     "id" => 12, 
     "prodname" => 'Ramkinkar Baij', 
     "attribute_name" => 'Editor', 
     "value" => 'Radha Prasad Gupta' 
    ), 

"4" => Array 
    (
     "id" => 13, 
     "prodname" => 'Ramkinkar Baij', 
     "attribute_name" => 'Place_of_Publication', 
     "value" => 'Panagarh, Burdwan, West Bengal' 
    ), 

"5" => Array 
    (
     "id" => 14, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Author', 
     "value" => 'sabsyasachi das' 
    ), 

"6" => Array 
    (
     "id" => 15, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Author', 
     "value" => 'Ela Datta' 
    ), 

"7" => Array 
    (
     "id" => 16, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Translated_by', 
     "value" => 'partha dasgupta' 
    ), 

"8" => Array 
    (
     "id" => 17, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Editor', 
     "value" => 'Bandana Mukhopadhay' 
    ), 

"9" => Array 
    (
     "id" => 18, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Editor', 
     "value" => 'Sathi Basu' 
    ), 

"10" => Array 
    (
     "id" => 19, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Translated_Title', 
     "value" => '(Second World Telugu Conference, 1981)' 
    ), 

"11" => Array 
    (
     "id" => 20, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Place_of_Publication', 
     "value" => 'Hyderabad' 
    ), 

"12" => Array 
    (
     "id" => 21, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Foreword', 
     "value" => 'Information on Government organisations of Art and Culture in Andhra Pradesh' 
    ), 

"13" => Array 
    (
     "id" => 22, 
     "prodname" => 'Rendava Prapancha Telugu Mahasabhalu, 1981', 
     "attribute_name" => 'Descriptive_Tags', 
     "value" => 'Conference, Language' 
    ) 

); 


$groups = array(); 

foreach($shop as $key => $array){ 
//$type is not necessary, it's just for clarity below 
$product = $array['prodname']; 



if(!isset($groups[$product])){ 
    $groups[$product] = array(); 
    $groups[$product]['prod'] = $array['prodname']; 
} 


$groups[$product][$array["attribute_name"]] = $array['value']; 

} 
//then combine the groups into a master array 
$out = array(); 
foreach($groups as $g){ 
$out[] = $g; 
} 
echo '<pre>'. print_r($out, true).'</pre>'; 
print "<pre>"; 
//print_r($groups); 
print "</pre>"; 
+1

这是一个分号。但为什么你需要连接任何东西? – Strawberry

+0

没有。陈述B不是陈述A的必然结论。 – Strawberry

+0

同样。请参阅:[为什么我应该为我认为是非常简单的SQL查询提供一个MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-对于什么似乎对我来说是一个非常简单的SQL查询) – Strawberry

回答

2

使用MySQLs GROUP BYGROUP_CONCAT函数。

SELECT prod_name, GROUP_CONCAT(CONCAT(attr_name, ': ', value) SEPARATOR ', ') AS attributes FROM [your tables and joins] GROUP BY prod_id 
+0

@tantau你是对的,但根据我的需要从mysql获取结果是非常困难的。所以我试图用php转换。我需要像这样'array(“0”=> array('productName'=>'x','author'=>'del Karnegie,William fulckner','editor'=>'x,y,z', )'或者可以像这样'array(“0”=> array('ProductName'=>'X','author1'=>'x','author2'=>'y','author3'=> 'z'))' –

+0

@ShuvadeepChakraborty您也可以将属性返回为JSON,以便在php中更好地处理它们。请参阅https://stackoverflow.com/questions/12511933/how-create-json-format-with-group-concat-mysql。较新的MySQL版本甚至有本地函数来创建JSON。 –

+0

请帮我一个忙。你能回顾一下这个查询[SQLfiddle]的功效吗(http://www.sqlfiddle.com/#!9/cc65ed/4) –