0

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

苹果: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 是查询生成的表 rates 的变量 $order_total 是产品的数量、价格或重量的变量。为了简单起见,我们将使用 qty 来回答这个问题。

4

2 回答 2

0

确实需要重新访问您的数据库模式,因为您的整个问题都是由于忽略了规范化规则。您有一个要在其上运行正则表达式的多值字段,而不是将该数据存储为您可以关联的字段。

这是一个演示案例的 SQLFiddle。(请注意,我将使用 PgSQL,因为我对 MySQL 的语法并不十分熟悉,而且我不想费心去查找它——但在两者之间进行映射应该很容易。 ) 我还在使用数据库中的“shopping_cart”表,这样我就可以演示解决方案的 SQL,而无需对一堆值进行硬编码;解决方案没有理由甚至需要将这些值存储在数据库中才能像演示的那样工作。

如果您需要帮助将当前数据转换为规范化结构,有很多专门为此类任务设计的ETL工具;Wikipedia 为您提供了一个不错的列表,但我个人更喜欢使用Pentaho 的 Kettle,这是一个非常强大且相当易于使用的开源 ETL 工具。

最后,我建议您花一些时间在体面的资源上帮助您学习关系数据库;Chris Date 的书“SQL 和关系理论”是我喜欢让人们阅读的一本书,并且(如果可能的话)请浏览O'Reilly 和 Associates 推出的视频讲座系列。

于 2013-03-25T05:15:58.937 回答
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"

它返回我需要的正确值!

于 2013-03-26T04:43:55.537 回答