2014-03-27 62 views
1

我的應用程序中有三個表格:products,sizesproduct_sizes列的多個值MySQL/CodeIgniter

的結構是這樣的:

產品表:

id INT(11) 
name VARCHAR(48) 

大小表:

id INT(11) 
name VARCHAR(48) 

product_sizes'表:

id INT(11) 
product_id INT(11) 
size_id INT(11) 

正如你所看到的,有一些產品有三種尺寸的例子。我需要向用戶展示這三種尺寸的名稱。

我在PHP現在什麼:

的index.php(圖)

<?php 

[...] 

foreach ($products as $product) { 
    echo $product->name; // for each item, show its name 
} 

而且我想與大小就這樣迭代:

<?php 

[...] 

foreach ($products as $product) { 
    [...] 

    echo $product->name; 

    foreach($product->sizes as $size) { 
     echo $size; // for each item, shows its available sizes (s, M, L, for example) 
    } 
} 

如何我是否可以按照上面所示的一致方式將尺寸一起合併到產品中?

我的查詢,現在是:

SELECT products.id, products.name, sizes.name FROM products 
JOIN product_sizes ON product_sizes.product_id = products.id 
JOIN sizes ON product_sizes.size_id = sizes.id 

我標記爲因爲如果有辦法通過它的ActiveRecord來解決這個問題,沒有問題,因爲我的應用程序在上面運行的CI。您可以正常分享您的解決方案。

回答

7

您可以在您的SQL查詢中使用GROUP_CONCAT()在一列中連接多個大小,並稍後處理該單元格值。

SELECT products.id, products.name, GROUP_CONCAT(sizes.name) available_sizes 
FROM products 
    JOIN product_sizes ON product_sizes.product_id = products.id 
    JOIN sizes ON product_sizes.size_id = sizes.id 
group by products.id 

PHP你可以使用它作爲以下。

foreach ($products as $product) { 
    [...] 

    echo $product->name; 

    $available_sizes=explode(",",$product->available_sizes); 
    foreach($available_sizes as $size) { 
     echo $size; // for each item, shows its available sizes (s, M, L, for example) 
    } 
} 

希望,這有助於:)

+1

P-E-R-F-E-C-T!謝謝你,小夥伴! –

+0

沒問題,隨時:) –

+1

早起的鳥兒得到蠕蟲! XD – Chococroc

0

你想做的事,你可以用一點SQL的實現它,看看這個是什麼,這是越來越分組值(你想要做什麼)到的一個例子單場:

http://sqlfiddle.com/#!2/400994/20

在你的情況,你會做這樣的事情:

SELECT 
    p.id 
, p.name 
, CONCAT("[", GROUP_CONCAT(s.name SEPARATOR ", "), "]") sizes 
FROM products p 
INNER JOIN product_sizes ps 
ON ps.product_id = p.id 
INNER JOIN sizes s 
ON ps.size_id = s.id 
GROUP BY p.id 

在你的PHP中,用json_decode,你會得到你想要的值。

foreach ($products as $product) { 
    [...] 

    echo $product->name; 
    $product_sizes = json_decode($product->sizes); 

    foreach($product_sizes as $size) { 
     echo $size; // for each item, shows its available sizes (s, M, L, for example) 
    } 
} 

JSON字符串的優點是,當你格式化它時,你可能會得到複雜的結構數據。