2011-08-27 76 views
0

我從這個論壇學到了很多東西,並且在此先感謝。基本上,我試圖對多個表的數據庫查詢的結果做「腳註」。我的表格有幾種生物材料的「參考書目」,但我無法以更具可讀性的方式整合結果。我想我需要使用多維數組,但我認爲必須有一個更優雅的方式。在PHP代碼MySQL的部分是:MySQL/PHP:整合來自多個表格的腳註結果

$queryFromAgentBW = "SELECT DISTINCT reports.ID, reports.link, agent_names.ID, agent_names.Name, agent.BW_Actor_List, agent.Common_Name, agent.Reference, actor_list.ID 

         FROM agent_names, agent 

         JOIN actor_list ON(agent.BW_Actor_List = actor_list.ID) 

         JOIN reports ON(agent.Reference = reports.ID) 

         WHERE agent_names.ID = agent.Agent_Name AND BW_Actor_List = '".mysql_real_escape_string($a)."'"; 


$resultFromAgentBW = mysql_query($queryFromAgentBW); 

     //check result; show error for debugging 
     if (!$resultFromAgentBW) 
     { 
    $message = 'Invalid query:'.mysql_error()."\n"; 
    $message .= 'Whole query:'.$queryFromAgentBW; 
    die($message); 
     } 
    while ($rowBW = mysql_fetch_assoc($resultFromAgentBW)) 
    { 

// Need to get all this in an array and then print out later so agents 
      are listed only once with all of the corresponding reference numbers 
$bwArray[] = $rowBW; 


       } 

,而PHP的 「漂亮的打印」 的代碼部分:

foreach ($bwArray as $bw) 
    {  
echo "Name: {$bw['Name']}<br />" 
. "Ref: {$bw['Reference']}<br />" 
. "Link: {$bw['link']}<br /><br />"; 
    } 

結果是現在:

Name: Abrin toxin 
    Ref: 1 
    Link: C:\wamp\www\References\Abrin\AbrinandRicin_Patocka.pdf 

    Name: Abrin toxin 
    Ref: 6 
    Link: C:\wamp\www\References\Abrin\TheEmergencyResponseSafetyandHealthDatabase_   Biotoxin_ ABRIN.pdf 

    Name: Adenovirus 
    Ref: 9 
    Link: C:\wamp\www\References\Adenovirus\Adenovirus (Serotypes 40 & 41)_PHAC .pdf 


    Name: Adenovirus 
    Ref: 13 
    Link: C:\wamp\www\References\Adenovirus\AdenovirusSerotype31InfectioninaNewbornGirlandReviewoftheLiterature.pdf 

,但理想情況下是:

Abrin Toxin [1, 6] 
    Adenovirus [9, 13] 

其中數字是現在顯示爲文本的href鏈接(PDF文檔參考)。感謝任何幫助或指導,在這種情況下什麼是最好的!

+1

這不是一個論壇,你知道 –

+0

阿肖克學OOP,那麼如何實現DAO 。然後如何將觀點從邏輯中分離出來。這意味着在你的情況下:不要在同一個文件中執行兩個操作:使用數據庫和交織html。 – Flavius

+0

@ Col. Shrapnel-哎呀!道歉,我應該說Q&A網站! @ Flavius - 是的,改進我的面向對象和DAO的理解能夠提高我的整體技能,並可能優化代碼,但Andrej L(在您評論之前發佈)的簡單提示/指導是我所需要的,並且真正回答了問題。此外,當你沒有特別選擇這個項目的原因,或者我的項目背景時,你對wamp的評論顯示了省級的觀念或更壞的無知。 – Ashok

回答

1

你應該子句添加GROUP_CONCAT功能和組到您的查詢,使各項工作在MySQL

SELECT group_concat(agent.Reference SEPARATOR ','), agent_names.ID, agent_names.Name 

        FROM agent_names, agent 

        JOIN actor_list ON(agent.BW_Actor_List = actor_list.ID) 

        JOIN reports ON(agent.Reference = reports.ID) 

        WHERE agent_names.ID = agent.Agent_Name AND BW_Actor_List = '".mysql_real_escape_string($a)."' 
GROUP BY agent_names.ID 
+0

這正是我所需要的。你是對的 - 在mysql中工作更乾淨更快。 – Ashok

1

你只需要在數組中正確地聚合結果。最後兩個循環更改爲:

while ($rowBW = mysql_fetch_assoc($resultFromAgentBW)) { 
    $bwArray[$rowBW['Name']][] = $rowBW; 
} 
foreach ($bwArray as $name => $refs) { 
    echo 'Name: ' . $name . ' ['; 
    for ($i = 0; $i < count($refs); $i++) { 
     echo ($i > 0 ? ' ' : '') . '<a href="' . $ref['link'] . '">' . $ref['Reference'] . '</a>'; 
    } 
    echo ']<br />'; 
} 

我忽略的數據與htmlspecialchars()逃逸更好的可讀性。

+0

謝謝 - 這個幫助我得到了引用,並且在合併來自Andrej的更新後的SELECT語句之後,我也需要正確鏈接。 – Ashok

相關問題