数组帮助。寻找更好的方法

时间:2010-03-02 10:55:48

标签: php

修改:: 也许我应该问一下从数据库中获取结果集的正确方法是什么。如果你有5个连接,那里有一个1:M的关系,你是否会在5个不同的时间去数据库?

我在一小时前问过这个问题,但未能得到合适的答案。我继续编写了一些代码,它完全符合我的需要,但我正在寻找更好的方法来实现它

这个数组给了我多行,其中只有一行需要一次而其他行需要多次。我需要按照以下方式过滤这些内容,但如果可能的话,还需要更好的方法。

Array
(
    [0] => Array
        (
            [cid] => one line
            [model] => one line
            [mfgr] => one line
            [color] => one line
            [orderid] => one line
            [product] => many lines
            [location] => many lines
        )
    [1] => Array
        (
            .. repeats for as many rows as were found
        )
)

这段代码完美无缺,但我认为有一种更有效的方法。是否有一个PHP函数可以让我清理一下这个?

    // these are the two columns that produce more than 1 result.
    $product = '';
    $orderid = '';

    foreach($res as $key)
    {
        // these produce many results but I only need one.
        $cid = $key['cid'];
        $model = $key['model'];
        $mfgr = $key['mfgr'];
        $color = $key['color'];
        $orderid = $key['orderid'];

        // these are the two columns that produce more than 1 result.
        if($key['flag'] == 'product')
        {
            $product .= $key['content'];
        }
        if($key['flag'] == 'orderid')
        {
            $orderid .= $key['content'];
        }
    }

// my variables from above in string format:

这是请求的SQL

SELECT
cid,
model,
mfgr,
color,
orderid,
product,
flag
FROM products Inner Join bluas ON products.cid = bluas.cid
WHERE bluas.cid = 332
ORDER BY bluas.location ASC

1 个答案:

答案 0 :(得分:1)

如果没有看到您的数据库结构,就很难破译您实际想要操纵数据的方式。

也许这就是你要找的东西?

SELECT p.cid, p.model, p.mfgr, p.color, p.orderid, p.product, p.flag, GROUP_CONCAT(p.content SEPARATOR ', ')
FROM products AS p
INNER JOIN bluas AS b ON p.cid = b.cid
WHERE b.cid = 332
GROUP BY p.cid, p.flag
ORDER BY b.location ASC

现在,对于每个产品cid,每个flag都会有一个由逗号分隔的列表组成的条目,而不是每个flag条目都有很多重复。

然后,在完成字符串后,您可以通过执行以下操作快速将其转换为数组以进行进一步操作:

explode(', ', $key['content']);

再次,如果没有看到您的数据库结构,很难说出您要提取的信息。您的SQL查询也与您的代码不匹配,就像我甚至没有看到您抓住content

无论如何,我非常确定GROUP BYGROUP_CONCAT more info的某些组合是您正在寻找的。

如果您可以共享更多的数据库结构,并详细了解您正在尝试提取哪些信息以及您希望如何格式化,我可以根据需要帮助您使用SQL。