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

Php 数组帮助。寻找更好的方法,php,Php,编辑:: 也许我应该问问从数据库中获取结果集的正确方法是什么。当您有5个连接,其中存在1:M关系时,您是否会在5次不同的时间访问数据库以获取数据?? 大约一个小时前我问了这个问题,但没有得到一个合适的答案。我继续写了一些代码,完全满足了我的需要,但我正在寻找更好的方法 这个数组提供了多行,其中一些行只需要一次,其他行需要多次。我需要像我在下面做的那样过滤这些,但是如果可能的话,我希望有一个更好的方法 Array ( [0] => Array (

编辑:: 也许我应该问问从数据库中获取结果集的正确方法是什么。当您有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

如果看不到数据库结构,就有点难以理解您实际想要如何操作数据

也许这就是你想要的

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查询也与您的代码不匹配,就像我甚至没有看到您抓取
内容

无论如何,我很确定你要找的是
groupby
groupu CONCAT
()的组合


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

是的,结果来自一个数据库。使用
where
语句对数据库进行筛选…knittl,我已经在使用where语句了。我需要结果集中的所有行,但需要限制前5列。此数据正在报表中使用。