修改:: 也许我应该问一下从数据库中获取结果集的正确方法是什么。如果你有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
答案 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 BY
和GROUP_CONCAT
(more info)的某些组合是您正在寻找的。 p >
如果您可以共享更多的数据库结构,并详细了解您正在尝试提取哪些信息以及您希望如何格式化,我可以根据需要帮助您使用SQL。