1

日々価格が変動する商品(貴金属)を販売しているショッピングサイトを作ろうとしています。各商品の乗数(「1.1」など)を含むテーブル(商品)があります。私は基本的に、自分のテーブルに行って、毎日何百ものアイテムの価格を変更する必要はありません。私のアイデアは、毎日の値で価格フィールドを変更するだけの別のテーブルを作成することです。最終製品の価格の合計を、あるテーブルの乗数に別のテーブルの入力された1日の価格を掛けたものにするにはどうすればよいですか。または、2つのテーブルを使用するよりも良い方法はありますか?これまでのところ、定義された価格で1つのテーブルのみを使用したコーディングは次のとおりです。

if (isset($_GET['id'])) {
    //Connect To Mysql Database
    include"storescripts/connect_to_mysql.php";
    $id = preg_replace('#[^0-9]#i','',$_GET['id']);
    //Use This VAR To Check To See If This ID Exists, If Yes Then Get Product
    //Details, If No Then Exit Script and Give Message Why
    $sql = mysql_query("SELECT * FROM products WHERE id='$id' LIMIT 1");
    $productCount = mysql_num_rows($sql);
    if ($productCount > 0) {
        //Get All The Product Details
        while ($row = mysql_fetch_array($sql)) {
            $product_name = $row["product_name"];
            $price = $row["price"];
            $details = $row["details"];
            $category = $row["category"];
            $subcategory = $row["subcategory"];
            $date_added = strftime("%b %d, %Y",strtotime($row["date_added"]));
        }

    } else {
        echo "That Item Does Not Exist";
        exit();
    }

} else {
    echo "Data To Render This Page Is Missing";
    exit();
} 

mysql_close();
4

1 に答える 1

1

では、通常の mysql_* 関連のペダントリーではない応答はどうでしょうか?

次のスキーマでは、材料表をリストされた価格から切り離して、日付に従って保管できるようにしました。これは、記録や請求に役立つ場合があります。

TABLE products
  prod_id     INT PK
  prod_name   VARCHAR
  prod_price  DECIMAL
  mat_id      INT FK
  ...

TABLE materials
  mat_id    INT PK
  mat_name  VARCHAR
  ...

TABLE material_pricing
  mat_id            INT FK PK
  mat_price_date    DATE PK
  mat_price_factor  DECIMAL

SELECT
  p.prod_name,
  p.prod_price * pr.mat_price_factor AS 'cur_price'
FROM products p INNER JOIN materials m
  ON p.mat_id = m.mat_id
  INNER JOIN material_pricing pr
  ON m.mat_id = pr.mat_id
WHERE mat_price_date = TODAY()

関連資料の最後に定義されたエントリを取得するようにクエリを変更する方法を考えようとしていますmaterial_pricingが、サブクエリのデータを並べるのに苦労しています...

編集:これでうまくいくはずです

SELECT
  p.prod_name,
  p.prod_price * pr.mat_price_factor AS 'cur_price'
FROM products p INNER JOIN materials m
  ON p.mat_id = m.mat_id
  INNER JOIN (
    SELECT p1.*
    FROM material_pricing p1 INNER JOIN (
      SELECT mat_id, MAX(mat_price_date) 'mat_price_date'
      FROM material_pricing
      WHERE mat_price_date <= $target_date
      GROUP BY mat_id
    ) p2
    ON p1.mat_id = p2.mat_id
      AND p1.mat_price_date = p2.mat_price_date
  ) pr
  ON p.mat_id = pr.mat_id

最も内側のサブクエリの場所は、今日の日付、 mySQL 関数、または表示されている請求書$target_dateの日付のいずれかに置き換えられます。TODAY()

于 2013-01-17T20:45:02.257 に答える