2015-03-18 34 views
1

我一直在從PHP程序編程轉向OOP。我有一個mysql數據庫與兩個表與1對多關係,我需要在列表中顯示該信息。我寫了下面的代碼,儘管代碼執行得很好,我真的不知道如果我仍然在'程序化'思考是否是最好的方法。我已經準備了以下聲明:PHP OOP:處理mysqli LEFT JOIN和數組的內容

$stmt = $mysqli_conn->prepare("SELECT display_name, 
             display_department, 
             display_region, 
             group_concat(approach_name) as approaches, 
             group_concat(length) as lengths, 
             group_concat(ascent) as ascents, 
             group_concat(gradient) as gradients 
           FROM table1 LEFT JOIN table2 
           ON table1.col_name=table2.col_name 
           GROUP BY table1.col_name"); 

這是下面的PHP代碼:

$stmt->execute(); 
$stmt->bind_result($display_name, $display_department, $display_region, $approaches, $lengths, $ascents, $gradients); 

while($stmt->fetch()) { 
    echo $display_name. '&nbsp|&nbsp'.$display_department.'&nbsp|&nbsp'.$display_region.'<br>'; 
    $arr_approaches = explode(',', $approaches); 
    $arr_lengths = explode(',', $lengths); 
    $arr_ascents = explode(',', $ascents); 
    $arr_gradients = explode(',', $gradients); 

    $arrayLength=sizeof($arr_approaches); 
    for ($i=0; $i<$arrayLength; $i++) { 
     echo $arr_approaches[$i].'&nbsp-&nbsp'.$arr_lengths[$i].'&nbsp|&nbsp'.$arr_ascents[$i].'&nbsp|&nbsp'.$arr_gradients[$i]; 
       echo '<br>'; 
    } 
    echo '<br>'; 
    unset($arrayLength); 
} 
$stmt->close(); 

具體我應該創建一個類爆炸,而不是顯示我怎麼做了,結果在這裏?

+0

沒關係,我現在看到你的表沒有存儲爲CSV的字段。你正在做一個group_concat – developerwjk 2015-03-18 23:10:53

+1

我認爲最好執行1個mysqli查詢並將結果分組到數組中,而不是嵌套mysqli查詢。 – keeper 2015-03-19 00:17:19

回答

0

從一種工作的編碼風格轉換到另一種工作的編碼風格可能很困難,除非有明顯的好處。

在這個例子中,任意移動到OOP可能只會導致不同的代碼執行相同的操作。因此,如果這是您使用和輸出這些數據的唯一方式,程序代碼將爲您提供所需的所有直接性和特異性。程序代碼擅長一次性任務。

但是一旦你開始建立類,你就開始考慮代碼的重用和靈活性。例如此代碼將數據與直接HTML輸出混合。如果將這些相同的數據有選擇地以CSV,HTML表格或可摺疊的樹形視圖輸出可能很方便,OOP將有助於將數據結果從輸出格式中分離出來。

+0

感謝@trent爲您的答覆,我開始讓我的思維在OOP和代碼重用方面進行思考,但我每時每刻都遇到這種困境。這個特定的代碼將在幾個不同的頁面上重用。 – keeper 2015-03-19 00:25:06