产品有桌子,平板或免费送货率如何写一个查询来接收所有费率

时间:2013-03-25 04:27:05

标签: php mysql database shipping

大家好我有几个包含我需要的信息的表,并创建了一个生成正确结果的SQL查询。问题是我有一些表列,我想执行if then语句。对于Ex:

苹果:25:15.00,50:10.00,100:0.00

这最多可以读取25个苹果15.00运费,最多50个充电10.00等...等等。

橘子:15.00 收取15的固定费率

香蕉:0.00 自由

所以基本上我希望能够在每个表速率实例上执行preg_split(),然后将所有这些值与平率相同。然后将两个表格费率和统一费率组合在一起,以获得正确的运费报价。

所以,如果我订购了50个苹果1000橙子和75香蕉,我的运费总计将计算为25.00

我已经拥有了我想在每个表速率实例上执行的代码

$table_cost = preg_split("^[:,]^" , $rate );
$size = sizeof($table_cost);
  for ($i=0, $n=$size; $i<$n; $i+=2) {
    if ($order_total <= $table_cost[$i]) {
      $var = $table_cost[$i+1];
    }
  }

$ rate是查询生成的表速率的变量 $ order_total是产品数量,价格或重量的变量。为了简单起见,我们将使用数量来解决这个问题。

2 个答案:

答案 0 :(得分:0)

真的 需要重新访问您的数据库架构,因为您的整个问题都是由于忽略规范化规则而导致的。您有一个多值字段,您希望运行正则表达式,而不是将该数据存储为您可以关联的字段。

Here's an SQLFiddle证明了这一情况。 (请注意,我将使用PgSQL,因为我不太熟悉MySQL的语法,我不想费心去查找它 - 但在两者之间进行映射应该很容易。我还使用了一个数据库内的“shopping_cart”表,这样我就可以在不对一堆值进行硬编码的情况下演示解决方案的SQL;没有理由解决方案甚至需要将这些值存储在数据库中才能正常工作。

如果您需要帮助将当前数据转换为规范化结构,那么有很多ETL工具专门针对这些类型的任务而设计;维基百科有decent list个版本,但我个人更喜欢使用Pentaho's Kettle,这是一个非常强大且易于使用的开源ETL工具。

最后,我建议花些时间用合适的资源来帮助你学习关系数据库; Chris Date's book "SQL and Relational Theory"是我喜欢让人们阅读的内容,(如果可能的话),请查看O'Reilly and Associates发布的video lecture series

答案 1 :(得分:0)

这已通过适当的值

解决

@TML

非常感谢你对我应该如何编写数据库的启发! 这是代码!

$sql = "select distinct srp.p_rate, srp.p_qty, srp.p_id, cb.customers_basket_quantity \n"
. "from `shipping_rates_p` srp\n"
. "join `customers_basket` cb on (cb.customers_basket_quantity <= srp.p_qty and
cb.products_id = srp.p_id)\n"
. "join `products` p on p.products_id = srp.p_id \n"
. "where cb.customers_id=\'3\'\n"
. "group by srp.p_id\n"

返回我需要的正确值!