1
我有兩個表A和B,它們在AB_xref中一起被xref。在從B表中獲取數據的過程中,我將A行中的所有行記錄到一個數組中,然後循環遍歷每個索引,查找與該A行相關的多個B行。然後,我將B中的行拼接到A中的行數組中 - 創建一個嵌套數組。mySQL - 在單個select中使用xref表從相關表中獲取數據
有沒有辦法使用單個選擇和條件來做到這一點?
我有兩個表A和B,它們在AB_xref中一起被xref。在從B表中獲取數據的過程中,我將A行中的所有行記錄到一個數組中,然後循環遍歷每個索引,查找與該A行相關的多個B行。然後,我將B中的行拼接到A中的行數組中 - 創建一個嵌套數組。mySQL - 在單個select中使用xref表從相關表中獲取數據
有沒有辦法使用單個選擇和條件來做到這一點?
看看這個地方靠近讓你的地方,你想:
查詢:
SELECT
packages.name AS package_name,
activities.name AS activity_name
FROM
package_activity_xref pax
INNER JOIN packages ON packages.id = pax.package_id
INNER JOIN activities ON activities.id = pax.activity_id
PHP:
$results = get_assoc_array_from_sql($your_query);
$outputArray = array();
foreach($results as $result) {
if (array_key_exists($result['package_name'], $outputArray)) {
// we already have an array at this package, push the new item
array_push($outputArray[$result['package_name']], $result['activity_name']);
} else {
// the target array doesn't exist yet, make it
$outputArray[$result['package_name']] = array($result['activity_name']);
}
}
基本上,此代碼將通過整個外部參照循環表一次(O(n)
其中n
是外部參照中的記錄數)。對於每條記錄,它將查看包名,並查看$outputArray
中是否存在密鑰。如果沒有,請將該鍵的值作爲當前活動名稱的數組。如果它存在,則將當前活動附加到該數組。
如果在執行後執行print_r($outputArray)
,則應該看到一個包含x
項的數組,其中x
是不同軟件包的數量。陣列中的每個元素將是另一個陣列,其中y
元素,其中y
是給定包的活動數量。
注意:您將需要自行實施get_assoc_array_from_sql
,但我認爲您要麼已經使用了某些實現,要麼您正在使用mysqli_fetch_assoc()或類似的東西。
你可以給你的表的樣本,你想要的輸出是什麼?並不一定是整個數據集,但一個簡單的例子,我敢肯定,我們可以找出一些 –
當然,表「包」有ID,名稱等「活動」有ID,名稱等「package_activity_xref」有package_id,activity_id。我試圖讓輸出成爲一個數組,其中每個包是索引,在該索引內是該包的列信息,然後是與該包相關的每個活動的數組。其基本上是輸出到一個包選擇器的HTML。我有一個使用「while」工作的版本,它將每個軟件包呈現爲li,並將這些活動作爲li的內容呈現,但這似乎是一種笨拙的處理方式。 – adm351