我有几个包含所需信息的表,并创建了一个生成正确结果的SQL查询。问题是我有一些表列要对其执行if-then
语句。
例如:
Apples: 25:15.00,50:10.00,100:0.00
这读起来25苹果收取15.00航运,高达50收取10.00等。
Oranges: 15.00
这个统一收费15英镑。
Bananas: 0.00
这意味着免费。
因此,基本上我希望能够在每个表费率示例上执行preg_split()
,然后将所有这些值与统一费率相同地添加在一起,然后将表费率和统一费率组添加在一起,以获得适当的航运报价。
因此,如果我订购了50个苹果,1000个橙子和75个香蕉,我的运输总额将计算出是25.00。
我已经有了要在表rate的每个示例上执行的代码:
$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
是产品的数量、价格或重量变量。为了简单起见,我们将使用qty
来回答这个问题。
2条答案
按热度按时间pjngdqdw1#
您***真的***需要重新访问您的数据库架构,因为您的整个问题都是由于忽略了规范化规则而产生的。您有一个多值字段,您希望在其上运行regex,而不是将该数据存储为您可以关联的字段。
这里有一个SQLFiddle来演示这种情况。(注意,我将使用PgSQL,因为我对MySQL的语法不是很熟悉,而且我不想麻烦去查找它--但是在两者之间Map应该很容易。)我还使用了一个数据库内的“shopping_cart”表,这样我就可以演示解决方案的SQL,而不必硬编码一堆值;解决方案甚至不需要将这些值存储在数据库中才能像演示的那样工作。
如果您需要帮助将当前数据转换为规范化结构,有很多ETL工具专门为这类任务设计;Wikipedia为您提供了一个decent list,但我个人更喜欢使用Pentaho's Kettle,这是一个非常强大且相当容易使用的开源ETL工具。
最后,我建议花些时间阅读一个不错的资源来帮助您学习关系数据库;Chris Date's book "SQL and Relational Theory"是我喜欢让人们阅读的一本书,(如果可能的话),请阅读O 'Reilly and Associates发布的video lecture series。
oknrviil2#
这已通过正确的值解决
@TML
非常感谢你启发我如何编写数据库!下面是代码!
它会返回我需要的正确值!