【问题标题】:PHP MYSQL database structure, multiple queries for one entryPHP MYSQL数据库结构,一个条目多查询
【发布时间】:2012-02-11 16:45:34
【问题描述】:

我正在构建一个相当简单的网站来跟踪一些工作销售情况。它涉及一个mysql数据库,每个条目都有多个表。在大多数情况下,关系是断断续续的。但是,我有一个 cmets 表,可以为同一次销售存储多个 cmets。我在 cmets 表中有一个与主要销售表的 ID 相关联的外键。我在总表和销售表之间有类似的安排,因为它为同一个 saleID 存储多个总金额。将这些插入数据库的最佳方法是什么?目前,我正在插入 cmets 并获取该行的 ID,然后插入 Gross 并获取 ID,然后使用 cmets id 和 Gross id 将插入到销售表中。有没有比 5 次查询更有效的方法?

--编辑:这是当前代码。我对此很陌生,所以我不得不查找程序以了解您的意思。看起来这基本上就是我正在做的事情,但是为它创建了一个方法,一旦我找出最有效的方法,我就会这样做。

//Prepare the Queries
//Insert Gross Amounts Query
$grossQ = "INSERT INTO gross (commGross, storeGross, manGross, fiGross, flatGross) VALUES ('$commGross', '$storeGross', '$manGross', '$fiGross')";

//Insert Comments Query
$commentsQ = "INSERT INTO comments (comment, dealcomment, grosscomment) VALUES ('$otherComments', '$dealComments', $grossComments')";

//Insert Deal Query
$q = "INSERT INTO sales (make, model, location, vehtype, saletype, manager, county, flat, unitcount, armoramount, controlnumber, salesman, stock) VALUES ('$make', '$model', '$location', '$vehType', '$saleType', '$managerName', '$county', '$flat', '$unitCount', '$armorAmount', '$controlNumber', '$salesmanName1', '$stock')";

//Make database connection
$db = new db('palm_sales');

//Execute gross query and get the id of the row
$db->execute($grossQ);
$grossID = $db->getLastID();

//Execute comments query and get the id of the row
$db->execute($commentsQ);
$commentsID = $db->getLastID();

//Build Main Query
$q = "INSERT INTO sales (make, model, location, vehtype, saletype, manager, gross, comments, county, flat, unitcount, armoramount, controlnumber, salesman, stock) VALUES ('$make', '$model', '$location', '$vehType', '$saleType', '$managerName', '$grossID', '$commentsID', '$county', '$flat', '$unitCount', '$armorAmount', '$controlNumber', '$salesmanName1', '$stock')";

//Execute Main Query
$db->execute($q);
if(mysql_affected_rows() > 0)
{
    echo "Success!";    
}
else echo "Error: ".mysql_error();

【问题讨论】:

  • 你能写一个存储过程吗?
  • 你能发布你的代码吗?最有效的方法可能是在触发器之间拆分插入
  • 你应该写一个存储过程,或者干脆使用sql事务来确保一切正常。
  • 足够高效,恕我直言,在代码中使用它也更容易调试,然后调试 mysql 程序非常困难。但是,我会将它们包装在事务中。
  • 我也从未使用过事务,所以我也会在这个项目中玩弄它们。

标签: php mysql database


【解决方案1】:

听起来您目前只执行 3 个查询 - mysql_insert_id() 不会执行新查询,它会提供有关刚刚执行的插入的信息。

不清楚为什么在插入评论或总收入时需要插入到销售表中。我想你会有这样的东西:

TABLE sales     PK id
TABLE comments  PK id   FK sales_id
TABLE gross     PK id   FK sales_id

当您获得新的销售时,您将插入到sales 表中。要添加新评论或总额,请使用销售 ID 的外键插入该表。哪一部分不起作用?

【讨论】:

  • 所有信息都以一种形式收集。不过我明白你在说什么。我目前也在 sales 表中存储了 FK cmets_id 和 FK Gross_id,但这不是必需的。我应该先插入主要销售,然后获取 cmets 和总销售的 id。
猜你喜欢
  • 2015-02-04
  • 2016-09-21
  • 1970-01-01
  • 2013-09-29
  • 2014-05-18
  • 2012-01-13
  • 2015-05-31
  • 2017-03-28
  • 1970-01-01
相关资源
最近更新 更多