2012-01-20 6 views
0

私はデータベースから注文を返す最良の方法を見つけようとしています。私はこれを思いついて、私が望むように働いています(私は思っています)それは私に探している結果を与えますが、正しいか、それとも良い方法があるかを知りたかったのです。

<?php 

$conn = mysql_connect('', '', ''); 
if (!$conn) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db($dbs, $conn); 

$Order_ID = $_POST['Order_ID']; 
//$Order_ID = '1001'; 

    $queryOrderHead = "SELECT * FROM Orders WHERE Order_ID = '$Order_ID' "; 

    $queryOrderLines = "SELECT * 

    FROM Order_LineDetails 
    WHERE Order_LineDetails.Order_ID = '$Order_ID' 

"; 
     if ($queryRunHead = mysql_query($queryOrderHead)){ 

       while ($info_HEAD = mysql_fetch_array($queryRunHead))  
       { 
        $OrderID_HEAD = $info_HEAD['Order_ID'];   
        $User_ID_HEAD = $info_HEAD['User_ID']; 
        $Customer_ID_HEAD = $info_HEAD['Customer_ID'];       
        echo $OrderID_HEAD.' '.$User_ID_HEAD.' '.$Customer_ID_HEAD.'<br>'; 
       } 

       $queryRunLines = mysql_query($queryOrderLines); 
       while ($info = mysql_fetch_array($queryRunLines))  
       { 
        $OrderID = $info['Order_ID'];   
        $OrderLineID = $info['OrderLineItem_ID'];   
        echo $OrderID.' '.$OrderLineID.'<br>'; 
       } 

     } else { 
     echo mysql_error();   
     } 

mysql_close($conn); 
?> 

だから、それが何、それは$ _POSTからOrder_IDのvalを使用し、それが同じOrder_IDを使用し、2番目のクエリをループし、成功に最初のクエリを実行し、別のテーブルからすべてのOrder_LineDetailsを取得しています。 mysql_real_escape()タグ以外

....

任意のポインタやアイデア???

+0

あなたは、データベースへの二つの呼び出しを排除し、単に1本の電話をかけることができ注文IDに基づいて2つのテーブルを結合します。つまり、SELECT O.Order_ID、O.user_ID、O.Customer_ID、O.OrderLIneItem_IDのようなものです。オーダーO LEFT JOIN order_lineDetails OLD ON O.Order_ID = OLD.Order_ID WHERE O.Order_ID = '$ Order_ID' 'データベースへの呼び出し回数が減るため、より高速に処理できますが、複製されるデータの量に応じて利点を無効にする可能性のある各レコードのデータが返されます。 – xQbert

+0

最初のクエリで常に1行のデータが返され、2番目のクエリで1から100+の行が返される場合はどうなりますか? – Monty

+0

注文を選択してから、注文アイテムを選択します。そのアプローチに間違いはありません。アレイに配置する方がより良い組織になります。 – webbiedave

答えて

0

任意のポインタまたはアイデア???

最初に注文を選択してから項目を選択することに問題はありません。しかし、あなたは(両方の変数とデータベース・スキーマ用)の配列構造にデータを整理するだけでなく、より良い命名規則を次の恩恵を受けるだろう:

$orderId = $_POST['order_id']; 

// order_id should be an INT, so no quotes. 
// Also look into parameterized queries with PDO as the mysql_* functions are archaic! 
$sqlOrder = "SELECT * 
      FROM orders 
      WHERE order_id = ".mysql_real_escape_string($orderId); 

$order = array(); 
if ($resOrder = mysql_query($sqlOrder)) { 

    if ($rowOrder = mysql_fetch_array($resOrder)) { 
     $order = $rowOrder; 
     // echo $rowOrder['order_id'].' '.$rowOrder['user_id'].' '.$rowOrder['customer_id']."<br />\n"; 

     $sqlOrderLines = "SELECT * 
        FROM order_lines 
        WHERE order_lines.order_id = ".mysql_real_escape_string($orderId); 

     if ($resOrderLines = mysql_query($sqlOrderLines)) { 
      $order['order_lines'] = array(); 
      while ($rowOrderLines = mysql_fetch_array($resOrderLines)) { 
       $order['order_lines'][] = $rowOrderLines;     
       // echo $rowOrderLines['order_id'].' '.$rowOrderLines['order_line_id']."<br />\n"; 
      } 
     } 
    } else { 
     echo 'Order not found'. 
    } 



} else { 
    echo mysql_error();   
} 

// debug 
print_r($order); 
+2

downvoteを説明してください。彼はそのような指針を必要としている。 – webbiedave

関連する問題