【问题标题】:SQL Results as PHP ArraySQL 结果作为 PHP 数组
【发布时间】:2011-09-25 07:56:39
【问题描述】:

我如何获得一个包含多行到一个数组中的 SQL 结果:

示例 SQL 表:

ID      Cat        LineID      Qty    DealID    Cost
1       Phone      1           2      8941      25.00
2       Phone      2           43     8941      85.00
3       Net        1           2      8941       1.00
4       App        1           1      8941      87.00
5       Phone      1           20     8942      98.00

希望能够返回如下结果:

$product[Phone][LineID][Qty]
$product[Phone][1][Qty] -- this would return 2

顺便说一句:在 Cat 中,LineID 永远不会重复,但它可能并不总是相同的 LineID - 例如,在 DealID 8941 下,可能有 Cat>Phones 1、2、3、4 的 LineID,但在不同的 DealID 下可能只有 Cat>Phones 4,5

不确定我是否完全错误的树,基本上我需要遍历 DealID 下的所有结果,然后交叉引用 LineID 以从另一个包含名称的表中获取有关该 LineID 的所有信息,图片等...然后按照以下内容放入一个html表中:

Product Name     Qty     Cost     Line Total
Phone 1           1      85.00    85.00

我希望我已经说清楚了,如果不是不要太苛刻!

谢谢, B.

【问题讨论】:

    标签: php sql arrays


    【解决方案1】:

    你需要使用php函数mysql_fetch_array()

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:
        $array = array();
        while ($row = mysql_fetch_assoc($query_result)) {
            $array[$row['Cat']][$row['LineID']] = array(
                'Qty' => $row['Qty'],
                'DealID' => $row['DealID'],
                'Cost' => $row['Cost']
            );
        }
        

        这将查看您的数组并创建您描述的结构的数组。请注意,我假设您希望在您提到的两个索引下所有剩余的字段都可用,而不仅仅是Qty。另一种更快但内存更大的解决方案是:

            $array[$row['Cat']][$row['LineID']] = $row;
        

        这会将每个值都放在那里,包括刚刚使用的 CatLineID 值。

        【讨论】:

        • @Dereleased - 谢谢你的回复 - 你能举个例子来说明如何重新计算一个值 - 比如 LineID 1 的成本 - 我试过 print_r 等,但它不起作用!!!!塔
        • 我刚刚意识到,根据您的表格,用作键的某些值组合是非唯一的,这不会包含所有值,而是每个唯一组合的最后一个值。例如,在您提供的表格中,ID 5 将覆盖 ID 1。对您的数据了解不多,我无法提出解决方案,除了 $array[$row['Cat']][$row['LineID']][$row['ID']] = array(
        • @Dereleases - 再次感谢 - 是否有完全不同但更好的方法来做到这一点 - 只能认为购物车风格的解决方案会起作用 - 有什么想法吗??
        • 你的目标是什么?你想做什么?
        • @Dereleases - 所以整个项目是一个引用工具。引用部分是通过将所有详细信息添加到数据库来完成的。这部分是在保存后重新加载报价,因此用户可以调用任何报价(即 www.url.php?QuoteID=xxx)。带有数据库的是表的数量。 Orderlines 表 - 这是所有报价行的保存位置(如上)。该表的 LineID 需要与另一个表交叉引用,具体取决于 Cat 是什么,因此如果 Cat 是 Phones,那么表 Phones 就是包含该 LineID 的所有详细信息(名称、图像等)的表。 .需要一个循环来获取..
        【解决方案4】:

        这就是答案:

        $sql="SELECT * FROM Blar";
        $result = mysql_query($sql);
        $combinedResults = array();
        while ($row = mysql_fetch_array($result)) {
            $combinedResults[$row['cat']][] = array( 
            'LineID' => $row['lineID'],
            'Qty' => $row['qty'],
            'SetCost' => $row['Setcost'],
            'MonCost' => $row['Moncost'],
            'Postcode' => $row['postcode']
            );
        };
        //print_r($combinedResults);
        print_r($combinedResults['Apps'][0]['Qty']);
        

        感谢您的帮助@Dereleases

        【讨论】:

        • 如果您接受@Dereleases(并赞成)答案,而不是它对您有帮助,那就更好了。这就是接受答案的重点。
        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多