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 は、クエリが生成するテーブル レートの変数です。 $order_total は、製品の数量、価格、または重量の変数です。簡単にするために、この質問には qty を使用します。

4

2 に答える 2

0

正規化ルールを無視した結果として質問全体が発生するため、データベース スキーマに再度アクセスする必要があります。関連するフィールドとしてそのデータを保存するのではなく、正規表現を実行したい多値フィールドがあります。

ケースを示すSQLFiddleを次に示します。(私は PgSQL を使用することに注意してください。なぜなら、私は MySQL の構文にあまり慣れていないためです。わざわざ調べる必要はありませんでしたが、2 つの間のマッピングは非常に簡単なはずです。 ) データベース内の「shopping_cart」テーブルも使用しています。これは、一連の値をハードコーディングせずにソリューションの SQL を実証できるようにするためです。示されているように機能するために、ソリューションがこれらの値をデータベースに格納する必要さえある理由はありません。

現在のデータを正規化された構造に変換するのに支援が必要な場合は、これらの種類のタスク専用に設計されたETLツールが多数あります。ウィキペディアには適切なリストがありますが、個人的には、非常に強力でかなり使いやすいオープンソースの ETL ツールであるPentaho の Kettleを使用することを好みます。

最後に、リレーショナル データベースの学習に役立つ適切なリソースに時間を費やすことをお勧めします。Chris Date の著書 "SQL and Relational Theory"は、私が人々に読んでもらい、(可能であれば) O'Reilly and 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 に答える