0

すべてのテーブルの「order_id」というフィールドに基づいて、3 つのテーブルから結果を取得する次のスクリプトがあります。

$sql = "SELECT 
o.order_id, 
order_product.model,
o.name, 
o.value, 
GROUP_CONCAT(o.order_id, order_product.model, o.name, o.value SEPARATOR ',') AS Options 
FROM `order_option` AS o 
LEFT JOIN `order` AS oo on o.order_id = oo.order_id
LEFT JOIN order_product ON o.order_id = order_product.order_id
where oo.order_status_id = 2 
group by oo.order_id";

$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result))
 {
$options=$row['Options'];
print "|$options|";

    PRINT "<br>-------------------<br>";
} 

問題は、テーブル「order_option」に各 order_id のオプションを含む 2 つ以上の行があることです。

スクリプトによって出力される結果は次のとおりです。

ID、モデル、オプション 1:値、ID、モデル、オプション 2:値

そして、私が必要とするのは:

ID、MODEL、OPTION1:値、OPTION2:値

したがって、すべての行で ID と MODEL が重複することはありません。

どうすればそれを達成できますか?

4

1 に答える 1

0

問題は、実装方法にありますGROUP_CONCATOrder_Optionテーブルには、同じオプション ID を持つ異なるオプションを持つ 2 つの行があります。何かのようなもの:

OrderId    Name     Value
1          Option1  Value1 
1          Option2  Value2

GROUP_CONCAT(OrderId, Name, Value) を使用すると、次のようなすべてのフィールドが連結されます。

1, Option1, Value1, 1, Option2, Value2

代わりに、独自に OrderId を取得する必要があります。

SELECT OrderId, GROUP_CONCAT(Name, Value)...

これにより、次のことが得られます。

1, Option1, Value1, Option2, Value2

あとはプレゼンテーション ロジックだけです。

幸運を。

于 2013-02-08T14:12:53.267 に答える