簡體   English   中英

加入兩個mysql表並在php中填充一個數組

[英]Joining two mysql tables and populate an array in php

我有兩張桌子

第一個表名稱是“ Library”

ID Name
1  A
2  B

第二個表格名稱是“ Books”

BID Book_Creater Book_Name
1   Variation1   Book1
1   Variation2   Book2
1   Variation3   Book3
2   Variation1   Book4
2   Variation2   Book5

的SQL是

$sql = mysql_query("select library.ID,books.Book_Creater,books.Book_name from library,books where library.ID = books.BID;

結果是

ID   Book_Creater   Book_name
1    Variation1     Book1
1    Variation2     Book2
1    Variation3     Book3
2    Variation1     Book4
2    Variation2     Book5

現在,我想創建一個看起來應該像這樣的數組,這就是我遇到的問題。

array(
      [1] => array(
                   [Variation1] => Book1
                   [Variation2] => Book2
                   [Variation3] => Book3
                  )
      [2] => array(
                   [Variation1] => Book4
                   [Variation2] => Book5

                  )
)

任何建議都會很好。

$res = array();
//for each result row
while($row = mysql_fetch_array($sql)) 
{
    //add a row to the multi dimensional result array
    //where the first key = id and the second key = Book_Creater
    $res[$row['id']][$row['Book_Creater']] = $row['Book_name'];
}
print_r($res);

一種簡單的方法是像當前一樣進行連接,然后在循環時將它們推入數組中(可能是因為當ID作為鍵尚不存在時,可以很簡潔地顯式創建一個新的子數組)。

像這樣的東西:

<?php

$store_array = array();

$sql = mysql_query("SELECT library.ID,books.Book_Creater,books.Book_name 
                FROM library
                INNER JOIN books 
                ON library.ID = books.BID");

$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) 
{
    if (!array_key_exists($row['ID'], $store_array))
    {
        $store_array[$row['ID']] = array();
    }
    $store_array[$row['ID']][$row['Book_Creater']] = $row['Book_name']
}

print_r($store_array);
?>

您還可以將一些工作拖到數據庫上,然后再將它們串聯在一起。 然后將結果拆分成數組:-

<?php

$store_array = array();

$sql = mysql_query("SELECT library.ID, GROUP_CONCAT(CONCAT_WS('#~#', books.Book_Creater,books.Book_name)) AS details
                FROM library
                INNER JOIN books 
                ON library.ID = books.BID
                GROUP BY library.ID");

$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) 
{
    $store_array[$row['ID']] = array();
    $details = explode(',', $row['details']);
    foreach($details as $detail)
    {
        $detail_line = explode('#~#', $row['detail']);
        $store_array[$row['ID']][$detail_line[0]] = $detail_line[1];
    }
}

print_r($store_array);
?>

請注意,如果要對實際數據執行此操作,則可能要選擇不會出現在數據中的定界符,並且默認情況下,GROUP_CONCAT的最大長度也相當有限。

另請注意,我已經使用了mysql_ *函數,因為這似乎是您正在使用的函數,但是這些函數已被棄用,現在可能不應該使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM