sql >> Databasteknik >  >> RDS >> Mysql

flerdimensionell array-fråga mysql

I grunden känns detta som ett databasproblem.

Ställ in procentkolumnen som NOT NULL och ställ in 0 som DEFAULT.

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

Sedan handlar det om (om jag förstår problemet) att plocka MAX() och MIN() procentvärdena för varje datum.

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;

...jag har inte testat det, så det kan behöva pillas med.

När du sedan går igenom din resultatuppsättning kan du deklarera de två separata subarrayerna och bygga din kompletta array.

$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;
}

Vid det här laget har jag gjort för många antaganden om ditt syfte/användning. I grund och botten, ställ in noll som standard för procent, fråga efter högsta och lägsta procent för varje datum-hastighetspar (om noll kommer noll att visas som högsta och lägsta värde). Gör vad du vill med resultatuppsättningen.




  1. MySQL hur man ändrar innodb-log-filstorlek

  2. Konfigurera SQL Server Log Shipping

  3. CREATE FUNCTION-fel Denna funktion har ingen av DETERMINISTISK, INGEN SQL eller READS SQL DATA

  4. Hur man räknar ut storleken på index i MySQL