2

我有几个要加入的表格,以从库存表格中显示我的产品详细信息。因此,由于多种颜色和尺寸,一个产品 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 但保留它的所有变体?

如果没有,我将如何将此产品回显到页面,因为我不希望它出现 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 回答