【问题标题】:MySQLi One Query Instead of Two (single while loop instead of while loop in while loop)MySQLi 一个查询而不是两个(单个 while 循环而不是 while 循环中的 while 循环)
【发布时间】:2013-07-10 08:36:20
【问题描述】:

我有三张桌子:http://sqlfiddle.com/#!2/c7317

我想每行得到这个输出:

 ProductId = 1
 ProductCode = 1
 ProductRetailPrice = 1
 SubProductThumb = 1.jpg (the first subproducts thumb, where ProductId = 1)

Sub Products of ProductId 1
---------------------------
SubProductId = 1
SubProductPieces = 10

SubProductId = 4
SubProductPieces = 40

SubProductId = 7
SubProductPieces = 70

我让这段代码与 MySQL 一起工作:

$show_product_content = mysql_query("
        SELECT DISTINCT a.`ProductId`, a.`ProductCode`, a.`ProductRetailPrice`, a.`ProductPrice`, a.`ProductOffer`, a.`ProductTopSeler`, a.`ProductStrass`, a.`ProductStatus`, b.`SubProductThumb`
        FROM `Products` as a, `SubProducts` as b
        WHERE b.ProductId=a.ProductId
        GROUP BY a.`ProductId`
    ");

    while($row = mysql_fetch_array($show_product_content))
    {
        echo '<br />ProductId = '.$row['ProductId'].'<br />';
        echo 'ProductCode = '.$row['ProductCode'].'<br />';
        echo 'ProductRetailPrice = '.$row['ProductRetailPrice'].'<br />';
        echo 'SubProductThumb = '. $row['SubProductThumb'].'<br /><br />';

        $product_id = $row['ProductId'];
        $show_sub_product_content = mysql_query("
            SELECT SubProductId, SubProductPieces, SubProductStatus, SubProductRingSize6, SubProductRingSize7, SubProductRingSize8, SubProductRingSize9, c1.ColorHex as Color1, c1.ColorName as ColorName1, c2.ColorHex as Color2, c2.ColorName as ColorName2
            FROM SubProducts
            INNER JOIN Colors c1 ON c1.ColorId=SubProducts.SubProductColor1
            INNER JOIN Colors c2 ON c2.ColorId=SubProducts.SubProductColor2
            WHERE ProductId='$product_id'
        ");

        echo 'Sub Products of ProductId '.$product_id.'<br />------------------------------------<br />';

        while($row = mysql_fetch_array($show_sub_product_content))
        {
            echo 'SubProductId = '.$row['SubProductId'].'<br />';
            echo 'SubProductPieces = '.$row['SubProductPieces'].'<br /><br />';
        }
    }

但是我想用prepare语句和单个查询来做到这一点,这可能吗?

【问题讨论】:

  • 很有可能,在查询中使用 INNER JOIN 将所有结果放入一个查询中,然后循环遍历这些结果。
  • 你能帮我解决这个问题吗?

标签: php loops mysqli while-loop


【解决方案1】:

您的单个​​查询如下,我结合了您的两个查询。

 SELECT a.`ProductId`, a.`ProductCode`, a.`ProductRetailPrice`, a.`ProductPrice`, a.`ProductOffer`, a.`ProductTopSeler`, a.`ProductStrass`, a.`ProductStatus`, b.`SubProductThumb`, b.SubProductId, b.SubProductPieces, b.SubProductStatus, b.SubProductRingSize6, b.SubProductRingSize7, b.SubProductRingSize8, b.SubProductRingSize9, c1.ColorHex as Color1, c1.ColorName as ColorName1, c2.ColorHex as Color2, c2.ColorName as ColorName2
    FROM `Products` as a, `SubProducts` as b
    LEFT JOIN Colors c1 ON c1.ColorId=b.SubProductColor1
    LEFT JOIN Colors c2 ON c2.ColorId=b.SubProductColor2
    WHERE b.ProductId=a.ProductId
    GROUP BY a.`ProductId`

【讨论】:

  • 这只回显一个子产品,我想回显所有具有 prodictid 1 等的子产品
【解决方案2】:

我认为 LEFT JOIN 在这种特定情况下应该很有用。 我正在做一些测试,我会告诉你的。

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2020-12-10
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多