2013-09-26 40 views
2

我想知道是否有辦法使用OO PHP來充分優化我的SQL請求。讓我們舉個例子,我們有一個名爲像3和表3的對象類:使用OO PHP優化SQL請求

  • 產品:編號,名稱,價格,顏色...
  • 顧客:ID,姓名,電子郵件...
  • 購物車:id,id_product,id_customer ...

所有獲得者和設置者都是經典的。 現在,我只想在我的付款頁面上顯示產品[姓名]和客戶[姓]。 相應的充分優化的要求是

SELECT product.name, customer.surname FROM cart INNER JOIN product ON product.id = cart.id_product INNER JOIN customer ON customer.id = cart.id_customer

在哪裏或如何我可以生成使用OOP這完全優化的要求嗎?而不必檢索整個對象並在以後處理它們?我需要爲每個需要優化的sql請求創建一個方法嗎?也許請求發生器?

+0

也許你可以看看ORM,它爲你做了這些,包括各種優化。 Propel支持急切的關係加載(一次檢索所有表而不是每次單獨檢索),並且您可以延遲加載列(在不經常使用它們的基礎上對某些列進行單獨的請求,適用於BLOB等)。看看教義,雖然我不知道那個。 – halfer

+0

@halfer我想知道我的代碼中有什麼,ORM正在從我這裏拿這個 –

回答

3

不知道我很理解,但也許這樣的事情會跳開始你:

function findIt($table,$field,$value) 
{ 
    $table=$mysqli->real_escape_string($table); 
    $field=$mysqli->real_escape_string($field); 
    $value=$mysqli->real_escape_string($value); 
    if ($result = $mysqli->query 
     ("SELECT * FROM $table WHERE $field like '$value' LIMIT 0,1;")) 
    { 
     return $result->fetch_object(); 
    } 
}  

要叫它:

$oCart=findIt('cart','id','SomeID'); 
echo $oCart->name; 
+0

這就是我想要的,但它不管理關節。我必須製作自己的請求生成器,所以? –

+1

正如我所說,這是一個讓你朝着正確方向前進的開始。您可以使用我的模型並將其展開以支持連接。 – sskoko

0

我一直在尋找的是一個ORM,因爲它可以管理自動請求優化。但是ORMs非常有限。所以我必須創建一個函數,以優化的方式生成我的請求。