2010-01-03 108 views
3

是否有办法从SQL查询中返回一个二维数组?如..从SQL查询中返回一个二维数组

“选择ID,X,Y,Z测试从”

..和有它返回为ID => X,Y,Z?我可以做一个循环并创建第二个数组,但我想这是额外的工作,我可能不需要做。现在只是不熟悉SQL。

+2

你究竟想要什么?您意识到SQL查询的结果是标量值还是二维数据集?无论如何,本身没有*数组*。 – Joey 2010-01-03 20:16:56

+1

我真的不明白你的问题。这不是SQL如何工作? SQL结果是行和列。在我看来,行+列与2D数组非常相似。你能发表一个你的桌子外观和你想要什么结果的例子吗? – 2010-01-03 20:17:46

+0

要添加到Johannes的评论,最接近的SQL必须对象为TYPE,但这只是在SQL中。从SQL中获取数据仍然是列,并且您需要从SQL结果中读取数据以使用您的语言填充适用对象(本例中为PHP)。 – 2010-01-03 20:19:42

回答

6

在PHP中,SQL查询只会返回结果集。行和列。

你需要以将其加工成您所提到的那种类型的阵列进一步循环。这没有问题,如果你经常使用它,它应该是你的数据库包装器的一部分。

$result = mysql_query(...); 
$aData = array(); 
while($row = mysql_fetch_assoc($result)) 
    $aData[$row['id']] = array($row['x'], $row['y'], $row['z']); 
+0

你可以保存一行$ aData = array();在不需要的情况下 – streetparade 2010-01-03 20:28:00

+5

@streetparade:将您的警告级别设置为'E_ALL | E_STRICT',你会发现数组的初始化实际上是需要的。 – gahooa 2010-01-03 20:46:21

0

SQL已经返回数据的2D集 - 多行,每行每行相同的字段。当你SELECT id, x, y, z FROM test,它会为每一行test返回idxyz值。 idx,yz相关联,因为它在同一行中返回。

如果你想有一个PHP数据结构id值映射到xy,并且z,你必须做的SELECT语句,并建立从结果集这个数据结构。

+0

你谈论多行。但是mysql在同一时间只能返回一行,所以: MySQL不能返回2D集。它可以返回或一维数组(mysql_fetch_row)或关联数组(mysql_fetch_assoc)。 – 2010-01-03 20:28:37

+0

是的,我的意思是所有的行都是2D集合。 – 2010-01-03 21:53:56

2

您的问题的答案是否定的,没有办法做到这一点。

关系数据库本质上是二维结构。它们可以表示结构之间的关系,但所有数据都以平面二维方式存储,并且按照这种方式进行查询和返回。不幸的是,没有像编程语言一样的数据结构概念。从SQL查询中获得的任何结果总是将成为字段和值的标量数据集。 PHP通过返回列名作为数组键和字段值作为数组值来实现这一点更容易,但是尽可能地得到。

为了把你的结果转换成一个多维数组,你必须用PHP来做到这一点你已经获取从数据库中获取结果之后。