2

在庫テーブルから製品の詳細を表示するために参加しているいくつかのテーブルがあります。したがって、複数の色とサイズがあるため、1 つの製品 ID が在庫テーブルに多数のエントリを持つ場合があります。

表1:tblStock

stockID
productID
sizeID
colourID
qty

表 2:tblColour

   colourID 
   colourName
   colourHEX

表 3:tblSize

   sizeID
   sizeName

私のクエリ:

    SELECT p.productID, c.colourName, c.colourHEX, sz.sizeName, s.qty
    FROM tblProducts p
    INNER JOIN tblStock s ON p.productID = s.productID
    INNER JOIN tblColour c ON s.colourID = c.colourID
    INNER JOIN tblSize sz ON s.sizeID = sz.sizeID
    WHERE p.productID = '$id'

戻ってきます:

   productID   colourName   colourHEX   sizeName       qty
   4           Burgundy     #621b40     Small          10
   4           Burgundy     #621b40     Medium         15
   4           Burgundy     #621b40     Large          20
   4           Pink         #ba0046     Large          20

製品 ID を 1 回だけ返して、すべてのバリエーションを保持する方法はありますか?

そうでない場合、この商品を 4 回表示させたくないので、この商品をページにエコーするにはどうすればよいでしょうか。利用可能なさまざまなオプションが詳細に表示されます。

4

2 に答える 2

2

group_concat関数を使用できます

SELECT p.productID, group_concat(distinct c.colourName), group_concat(distinct c.colourHEX), group_concat(distinct sz.sizeName), sum(s.qty)
FROM tblProducts p
INNER JOIN tblStock s ON p.productID = s.productID
INNER JOIN tblColour c ON s.colourID = c.colourID
INNER JOIN tblSize sz ON s.sizeID = sz.sizeID
WHERE p.productID = '$id'
group by p.productID ;// group by required only if you product id clause is removed
于 2013-03-17T17:31:42.850 に答える
0

私は PHP に慣れていませんが、問題は非常に単純です。

必要なのは、次のようなループ内の別の変数だけです。

sql="SELECT p.productID, c.colourName, c.colourHEX, sz.sizeName, s.qty"
sql=sql+"FROM tblProducts p"
sql=sql+"INNER JOIN tblStock s ON p.productID = s.productID"
sql=sql+"INNER JOIN tblColour c ON s.colourID = c.colourID"
sql=sql+"INNER JOIN tblSize sz ON s.sizeID = sz.sizeID"
sql=sql+"WHERE p.productID = '$id'"

Set rs = RecordSetForStoringSQLQueryResult -- Replace with appropriate code in PHP
rs.Open (connectionName, sql)

$prevProductID = Null; -- Or some other number
while not rs.EndOfFile
    $currentId = rs("productID")
    if ($currentId != $lastId) {
         -- New ID found, display it.
         echo($currentId); 
         $prevProductID = $currentId
    } else { 
         -- Code for logic when the current product ID is same as previous product ID
         -- You will not assign anything to $prevProductID in this section.
    }
    rs.MoveToNextRecord
end while

私は PHP の専門家ではありませんが、従来の ASP で同様のことを行ったことがあります。上記のコードは説明用であり、直接使用することはできません。計画に合わせて微調整する必要があります。

于 2013-03-17T17:24:28.737 に答える