我有兩個表阿& B,和B具有許多:與A 1間的關係檢索第二表中查詢笨子陣列
當查詢從A行我也想有返回對應的B的記錄作爲一個數組,並添加到從結果數組,所以我結束了這樣的事情:剛
A-ROW
field
field
B-ITEMS
item1
item2
item3
有沒有乾淨的方式與一個查詢(可能是加入?)要做到這一點,還是應該我在A上對ID進行第二次查詢並將其添加到結果數組中?
我有兩個表阿& B,和B具有許多:與A 1間的關係檢索第二表中查詢笨子陣列
當查詢從A行我也想有返回對應的B的記錄作爲一個數組,並添加到從結果數組,所以我結束了這樣的事情:剛
A-ROW
field
field
B-ITEMS
item1
item2
item3
有沒有乾淨的方式與一個查詢(可能是加入?)要做到這一點,還是應該我在A上對ID進行第二次查詢並將其添加到結果數組中?
在表A上連接表B會更高效。它不會爲您提供所需形狀的數據。但是你可以遍歷這個結果並將數據構建成所需的形狀。
下面是一些代碼來說明這個想法:
// Join table B on table A through a foreign key
$sql = 'select a.id, a.x, b.y
from a
left join b on b.a_id=a.id
order by a.id';
// Execute query
$result = $this->db->query($sql)->result_array();
// Initialise desired result
$shaped_result = array();
// Loop through the SQL result creating the data in your desired shape
foreach ($result as $row)
{
// The primary key of A
$id = $row['id'];
// Add a new result row for A if we have not come across this key before
if (!array_key_exists($id, $shaped_result))
{
$shaped_result[$id] = array('id' => $id, 'x' => $row['x'], 'b_items' => array());
}
if ($row['y'] != null)
{
// Push B item onto sub array
$shaped_result[$id]['b_items'][] = $row['y'];
}
}
「...只需從A對ID進行第二次查詢,並將其添加到結果數組......」 - 這是正確的解決方案。 SQL不會理解嵌套的數組結構。
要建立在什麼Smandoli說 -
運行輔助查詢分別是更有效,因爲即使在主錶行數據( A)已經改變,副表(B)上未更改的數據將導致(MySQL)查詢緩存命中,假設ID從不改變。
這不一定適用於聯接查詢方法。
由於如果輔助表(B)具有與主表中的單個行關聯的多個行,則聯接方法將爲主表(A)提取重複數據,因此數據傳遞的數據也將減少。
希望有人希望做到這一點(相對)常見的數據檢索類型可能會發現這有用。
令人印象深刻的解決方案,並很好勾勒。 – Smandoli 2010-08-16 16:01:58
我目前正在嘗試在我的應用程序中執行此操作,但如果您不知道Datamapper(Overzealous Edition)是否會出現此問題,那麼您的解決方案對我而言完全適用。在解決方案的佈局和交付方面做得很好,只要每個人都有這樣的真棒,清晰和經過深思熟慮的答案。 – 2010-08-17 02:50:27