2010-01-03 109 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來做到這一點你已經獲取從數據庫中獲取結果之後。