2017-01-29 15 views
0

私はホテルの予約システムで働いており、料金は一晩です。 私のデータベースには2つのテーブルがあります.1つは在庫と他のプロモーションです。最初の行には1行(365日)が含まれ、最後の行には割引率のある日のみが格納されます。時には、いくつかの日に2つ以上の異なる割引率があります。この場合、1月30日と31日は0.10と0.15です。多次元配列クエリmysql

表ストック

date   | rate 
-------------------------- 
2017-01-29  500 
2017-01-30  500 
2017-01-31  500 

表キャンペーン

date   | percent 
-------------------------- 
2017-01-30  0.10 
2017-01-31  0.10 
2017-01-30  0.15 
2017-01-31  0.15 

MySQLのクエリは(s.date、s.rate、IFNULL(p.percentを選択しながら、0) ストックの左からJOINプロモーションp ON s.date = p.date 日付は「2017-01-29」と「2017-01-31」の間にどこにsdateがありますか)この結果は

date   | rate  | percent 
----------------------------------- 
2017-01-29  500   0 
2017-01-30  500   0.10 
2017-01-31  500   0.10 
2017-01-30  500   0.15 
2017-01-31  500   0.15 
です

私は多次元配列を作成する必要があります。多次元配列には割引率ごとに1つの配列が含まれ、これらの配列には3日、パーセント29の日29、その他の2日0.10が含まれます。 1日29日には0.00と残りの2日0.15との新しいもの。私はトールしているが、両方の配列で29日を割り当てない。

Array 
(
    [1] => Array 
     (
      [0] => Array 
       (
        [date] => 2017-01-29 
        [rate]=>500 
        [percent] => 0.00 
       ) 

      [1] => Array 
       (
        [date] => 2017-01-30 
        [rate]=>500 
        [percent] => 0.10 
       ) 

      [2] => Array 
       (
        [date] => 2017-01-31 
        [rate]=>500 
        [percent] => 0.10 
       ) 
     ) 

    [2] => Array 
     (
      [0] => Array 
       (
        [date] => 2017-01-29 
        [rate]=>500 
        [percent] => 0.00 
       ) 

      [1] => Array 
       (
        [date] => 2017-01-30 
        [rate]=>500 
        [percent] => 0.15 
       ) 

      [2] => Array 
       (
        [date] => 2017-01-31 
        [rate]=>500 
        [percent] => 0.15 

       ) 
     ) 
) 
+0

SQLクエリとテーブルの表示方法を教えてください。 – recycler

+0

はい、申し訳ありませんが、私は質問を書いています。 –

+0

コードを提供することもできますか?両方の配列で29日を割り当てることはできないと言います。どのようにあなたの配列を構築するのですか? –

答えて

0

これは、データベースの問題のように感じられます。

%カラムをNOT NULLに設定し、DEFAULTとして0を設定します。

ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0'; 

は、その後、それは(私が問題を理解している場合)、各日付のMAX()およびMIN()パーセント値を摘採の問題です。

SELECT s.date, s.rate, MAX(p.percent) AS maxperc, MIN(p.percent) AS minperc 
    FROM stock s 
    LEFT JOIN promotions p ON s.date = p.date 
    WHERE s.date BETWEEN '2017-01-29' AND '2017-01-31' 
    GROUP BY s.date,s.rate; 

...私はそれをテストしていないので、いくつかの手抜きが必要な場合があります。

結果セットをループするときに、2つの別々のサブアレイを宣言して完全な配列を構築することができます。

$array=[]; 
$i=0; 
while($row=mysqli_fetch_assoc($result)){ 
    $array[0][$i]["date"]=$row["date"]; 
    $array[0][$i]["rate"]=$row["rate"]; 
    $array[0][$i]["perc"]=$row["minperc"]; 
    $array[1][$i]["date"]=$row["date"]; 
    $array[1][$i]["rate"]=$row["rate"]; 
    $array[1][$i]["perc"]=$row["maxperc"]; 
    ++$i; 
} 

この時点までに、私はあなたの目的/用途についてあまりにも多くの仮定をしました。 基本的には、デフォルトのパーセントとしてゼロを設定し、各日付 - レートペアの最高と最低のパーセントをクエリします(ゼロの場合は、ゼロが最高値と最低値として表示されます)。あなたが望むものを結果セットで行います。

+0

@AngelValdezこれで問題が解決した場合は、緑のダニを授与してください。 – mickmackusa