2014-02-15 33 views
0

如何通過將每個值放在它所屬的屬性下來打印屬性和值。所以下一個屬性和幾個值。使用它們的值打印產品屬性

//i can have the array the normal way if it helps, like [0] => Red... 
[attribute] => Array 
    (
     [0] => Array 
      (
       [Colour] => Red 
      ) 

     [1] => Array 
      (
       [Colour] => Blue 
      ) 

     [2] => Array 
      (
       [Colour] => Green 
      ) 

     [3] => Array 
      (
       [Size] => Small 
      ) 

     [4] => Array 
      (
       [Size] => Medium 
      ) 

     [5] => Array 
      (
       [Size] => Large 
      ) 

    ) 

如果這可以在查詢中通過返回一個屬性而不是多個屬性及其值,那很好。但我也希望通過打印數組鍵來完成此操作,然後顯示數值,我會對其進行+1。

SELECT `attribute`, `value` 
FROM (`attribute_value`) 
JOIN `product_attr_value` ON `product_attr_value`.`attribute_value_id` = `attribute_value`.`id` 
JOIN `products` ON `products`.`id` = `product_attr_value`.`product_id` 
WHERE `products`.`item_name` LIKE '%qwe2%' 

編輯:

文件1

for ($set = array(); $row = $result->fetch_assoc(); $set[] = $row); 

return $set; 

文件2

foreach ($attr_value as $val) 
{ 
echo $val['attribute'] ."<br>"; 

$values = $val['group_concat(`value`)']; 
$value = explode(",", $values); 
echo $value."<br>"; 
} 

回答

0

你想要一個group by

SELECT attribute, group_concat(`value`) 
FROM attribute_value av JOIN 
    product_attr_value pav 
    ON pav.attribute_value_id = av.id JOIN 
    products p 
    ON p.id = pav.product_id 
WHERE p.`item_name` LIKE '%qwe2%' 
group by attribute; 

我還添加了表別名,以避免在整個查詢中重複長表名。

group_concat()會將值連接成單個字符串。默認情況下,這些由逗號分隔。您可以使用SEPARATOR關鍵字來控制它。

+0

好吧,我試圖弄清楚這一點,但首先,我得到重複。我嘗試通過pav.attribute_value_id進行分組,因爲這是我獲得第一個結果的方式,但這不起作用。其次,我似乎無法打印這些值。請看看編輯。 – ethio

+0

@ethio。 。 。你試過這個查詢嗎?我懷疑'pav.attribute_value_id'是該表中每行的唯一標識。由它聚合不會做你想要的。 –

+0

是的,我用它來停止不同屬性的值混合並停止重複。 pav.attribute_value_id是特定屬性和值的attribute_value中的主鍵。 – ethio