【问题标题】:SQL requests optimization using OO PHP使用 OO PHP 优化 SQL 请求
【发布时间】:2013-10-02 01:56:04
【问题描述】:

我想知道是否有一种方法可以使用 OO PHP 完全优化我的 SQL 请求。举个例子,我们有 3 个对象类,命名为 3 个表:

  • 产品:ID、名称、价格、颜色...
  • 客户:身份证、姓名、姓氏、电子邮件...
  • 购物车:id、id_product、id_customer...

所有的 getter 和 setter 都是经典的。 现在,我只想在我的付款页面上显示 Product[name] 和 Customer[surname]。 对应的完全优化的请求是

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 请求创建一个方法?也许是一个请求生成器?

【问题讨论】:

  • 也许你可以研究一下 ORM,它会为你做这件事,包括各种优化。 Propel 支持急切关系加载(一次检索所有表,而不是单独检索所有表),并且您可以延迟加载列(根据您不经常使用的某些列单独请求它们,对于 BLOB 等很方便)。看看 Doctrine,虽然我不知道那个。
  • @halfer 我想知道我的代码中有什么,ORM 正在从我这里获取这个

标签: php sql oop optimization


【解决方案1】:

不确定我是否完全理解,但也许这样的事情会让你开始:

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;

【讨论】:

  • 这正是我想要的,但它不管理关节。我必须制作自己的请求生成器,所以?
  • 正如我所说,这是一个让您朝着正确方向前进的跳跃开始。您可以使用我的模型并将其扩展为支持连接。
【解决方案2】:

我一直在寻找的是 ORM,因为它可以自动管理请求优化。但是 ORM 非常受限制。所以我必须创建一个函数,以优化的方式生成我的请求。

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2019-02-16
    相关资源
    最近更新 更多