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